2015-10-12 3 views
0

Je me demande s'il est possible pour moi d'ajouter plusieurs octets [] d'un fichier dans une liste et plus tard écrire le btye [] à l'intérieur d'un fichier.Arraylist de byte [] Java

Désolé d'être vague, c'est la première fois que je poste ci-dessous est un segment de mon code. le fichier de sortie semble être plus grand que le fichier original et je ne peux pas sembler comprendre pourquoi

ArrayList<byte[]> tempStorage = new ArrayList<byte[]>(); 
byte[] byteArray; 

while (n < length && n != -1) 
{ 
    byteArray = new byte[960]; 
    n = in.read(byteArray, 0, 960); 
    tempStorage.add(byteArray); 
    count++; 
} 

for (byte[] temp: tempStorage) { 
    fileOuputStream.write(temp); 
} 
fileOuputStream.close(); 
+5

pourquoi ne pas essayer de voir vous-même? – Abubakkar

+2

S'il vous plaît essayer avant de demander, mais si vous avez un problème sur votre test, vous pouvez demander! – Aroniaina

+0

oui vous pouvez .... – nafas

Répondre

2

Disons que la taille de votre tableau est 4 et la taille du fichier est 6. Vous lisez d'abord 4 octets, placez-le dans le tableau et stockez ce tableau dans la liste. Ensuite, vous lisez ces 2 derniers octets (puisque la taille était 6) et le stockez dans un tableau dont la taille est 4. Cela signifie qu'une partie de ce dernier tableau sera vide et devrait être ignoré.

Mais dans votre

for (byte[] temp: tempStorage) { 
    fileOuputStream.write(temp); 
} 

vous écrivez tout dernier tableau, y compris une partie qui doit être ignorée (vous écrirez 4 octets au lieu de 2, qui feront de votre fichier plus grand).

Donc, pour dernière température vous devez utiliser la méthode write qui décrira le nombre d'octets de ce tableau que nous voulons utiliser (vous avez cette information dans n variables depuis que vous obtenez en n = in.read(byteArray, 0, 960);).

Donc, pour la dernière temp essayer quelque chose comme fileOuputStream.write(temp,0,n)