Sto cercando di leggere un'immagine da un URL (con il pacchetto java java.net.URL) in un byte []. "Tutto" funziona bene, tranne per il fatto che il contenuto non viene letto direttamente dallo stream (l'immagine è corrotta, non contiene tutti i dati dell'immagine) ... L'array di byte viene mantenuto in un database (BLOB). Io davvero non so che cosa l'approccio corretto è, forse si può darmi un suggerimento :)java.net.URL read stream to byte []
Questo è il mio primo approccio (codice formattato, informazioni inutili rimossi ...):
URL u = new URL("http://localhost:8080/images/anImage.jpg");
int contentLength = u.openConnection().getContentLength();
Inputstream openStream = u.openStream();
byte[] binaryData = new byte[contentLength];
openStream.read(binaryData);
openStream.close();
mio secondo approccio era questo uno (come avrete capito il ContentLength viene recuperato in un altro modo):
URL u = new URL(content);
openStream = u.openStream();
int contentLength = openStream.available();
byte[] binaryData = new byte[contentLength];
openStream.read(binaryData);
openStream.close();
Entrambi risultato codice in un immagine corrotta ... ho già letto questo post from stackoverflow
Per favore non scrivere mai un vuoto blocco, nemmeno in un esempio! Metti almeno 'e.printStackTrace()' lì! Gli esempi hanno la tendenza a diventare un codice di produzione e tutti dobbiamo lavorarci sopra in seguito. –
Hai assolutamente ragione; Grazie per la segnalazione. Ho aggiunto una gestione delle eccezioni più significativa all'esempio. – RTBarnard
Utilizzare http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toByteArray(java.io.InputStream). Questo renderà il codice molto più pulito. – Adi