Vorrei sapere come eseguire una copia profonda di InputStream
.Come eseguire una copia profonda di un InputStream in Java
So che può essere fatto con pacchetti IOUtils, ma vorrei evitarli se possibile. Qualcuno conosce un modo alternativo?
Vorrei sapere come eseguire una copia profonda di InputStream
.Come eseguire una copia profonda di un InputStream in Java
So che può essere fatto con pacchetti IOUtils, ma vorrei evitarli se possibile. Qualcuno conosce un modo alternativo?
InputStream è astratto e non espone (né i propri figli) oggetti di dati interni. Pertanto, l'unico modo per "copiare in profondità" InputStream è creare ByteArrayOutputStream e, dopo aver eseguito read() su InputStream, scrivere() questi dati su ByteArrayOutputStream. Poi fare:
newStream = new ByteArrayInputStream(byteArrayOutputStream.toArray());
Se si utilizza mark()
sul InputStream allora davvero non si può invertire questo. Questo rende il tuo flusso "consumato".
Per "riutilizzare" InputStream evitare l'uso di mark() e quindi alla fine della lettura della chiamata reset(). Potrai quindi leggere dall'inizio del flusso.
Modificato:
BTW, IOUtils utilizza questo semplice frammento di codice da copiare InputStream:
public static int copy(InputStream input, OutputStream output) throws IOException{
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int count = 0;
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
Per saperne di più: http://kickjava.com/src/org/apache/commons/io/CopyUtils.java.htm#ixzz13ymaCX9m
cosa DEFAULT_BUFFER_SIZE di solito usi con questo metodo? –
Perché vuoi farlo? Afaik non puoi leggere due volte da un flusso. – thejh
Per qualche strana ragione penso che il mio stream venga consumato una volta che l'ho usato. Quindi per far sì che non sia il caso vorrei fare una copia profonda. Sto lavorando con Android e ottenendo immagini da un webservice usando l'architettura REST. – Spredzy
Perché non ci mostri il codice pertinente e spieghi il problema reale che stai riscontrando? –