Comment écrire un potentiellement énorme InputStream de Fichier?
J'ai un appel d'API qui renvoie un tableau d'octets. Je suis actuellement stream le résultat dans un tableau d'octets, alors assurez-vous que les sommes de contrôle de match, puis écrire le ByteArrayOutputStream de Fichier. Le code est quelque chose comme ça et ça marche plutôt bien.
String path = "file.txt";
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
FileOutputStream stream = new FileOutputStream(path);
stream.write(byteBuffer.toByteArray());
Mon souci, j'ai que le résultat de inputstream pourrait être plus grande que la taille du segment de mémoire dans android et j'ai pu obtenir OutOfMemory des exceptions si l'ensemble du tableau d'octets en mémoire. Quelle est la façon la plus élégante d'écrire l'inputStream de fichier en morceaux, tels que le tableau d'octets n'est jamais plus grande que la taille du segment de mémoire?
Simplement éliminer l'utilisation de
ByteArrayOutputStream
. (Je l'ai lu de mal .. mon utilisation?)OriginalL'auteur JoeLallouz | 2012-03-28
Vous devez vous connecter pour publier un commentaire.
Ne pas écrire sur le
ByteArrayOutputStream
. Écrire directement à laFileOutputStream
.Je suis allé avec ce OutputStream de sortie = new BufferedOutputStream(new FileOutputStream(path)); après la lecture de la FileOutputStream docs.
N'hésitez pas à modifier ma réponse à réfléchir, et à l'accepter. Sinon, vous pouvez vous/devrait post & accepter votre propre réponse.
OriginalL'auteur Matt Ball
Je suis allé avec les conseils de sauter le ByteArrayOutputStream et écrire à la FileOutputStream, ce qui semble répondre à mes préoccupations. Avec un réglage rapide, où la FileOutputStream est décoré par un BufferedOutputStream
is
censé être leFileInputStream
? C'est undefinedquel est l'avantage d'utiliser BufferedOutputStream au lieu d'utiliser directement FileOutputStream ?
OriginalL'auteur JoeLallouz