Innanzitutto l'uso di BufferedInputStream sarebbe del tutto superfluo. Nel tuo ciclo stai già leggendo "a blocchi", non c'è altro di meglio che si possa fare e una bufferizzazione "di sotto" non migliorerebbe nulla (semmai sarebbe solo uno strato in più per cui passare).Originariamente inviato da Mitele
salve ragazzi mi dite se riesco a leggere corretamente un array di byte?
E d'altronde la risorsa "finale" è un ByteArrayInputStream che ha già tutto in memoria.
Poi in genere il ciclo di lettura si fa (tipicamente) con una struttura diversa. E devi anche tenere presente una cosa. Tu leggi a blocchi di 9096 byte per volta. Se la dimensione del contenuto è di lunghezza multipla di 9096 byte, ad ogni lettura avresti il buffer sempre completamente pieno.
Ma non è detto che sia così! L'ultimo "chunk" (pezzetto) potrebbe essere di lunghezza inferiore, quindi l'ultima lettura riempirebbe solo parzialmente il buffer che verso la fine avrebbe "spazzatura" (ciò che è rimasto dalla lettura precedente). Ma tu con quel AllFile.add(buffer) usi sempre il buffer al completo. Ed è sbagliato.
Detto in altre parole, devi usare la lunghezza restituita da read per sapere quanto usare del buffer.