Vous pourriez d'abord écrire la longueur du morceau dans le fichier comme une valeur de taille fixe, par exemple un entier de 4 octets, suivi des données elles-mêmes :
public void appendChunk(byte[] data, File file) throws IOException {
DataOutputStream stream = null;
try {
stream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file, true)));
stream.writeInt(data.length);
stream.write(data);
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// ignore
}
}
}
}
Si vous devez ensuite relire les morceaux de ce fichier, vous commencez par lire la longueur du premier morceau. Vous pouvez maintenant décider de lire les données du chunk ou de les ignorer et de passer au chunk suivant.
public void processChunks(File file) throws IOException {
DataInputStream stream = null;
try {
stream = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
while (true) {
try {
int length = stream.readInt();
byte[] data = new byte[length];
stream.readFully(data);
// todo: do something with the data
} catch (EOFException e) {
// end of file reached
break;
}
}
} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e) {
// ignore
}
}
}
}
Vous pouvez également ajouter d'autres méta-données sur les chunks, comme écrire le nom original du fichier avec stream.writeUTF(...). Vous devez simplement vous assurer que vous écrivez et lisez les mêmes données dans le même ordre.