Estoy tratando de dividir un archivo binario (como video/audio/imagen) en pedazos de 100 kb cada uno y luego unir esos fragmentos para recuperar el archivo original. Mi código parece estar funcionando, en el sentido de que divide el archivo y une los fragmentos, el archivo que obtengo es del mismo tamaño que el original. Sin embargo, el problema es que los contenidos se truncan, es decir, si se trata de un archivo de video, se detiene después de 2 segundos, si se trata de un archivo de imagen, entonces solo la parte superior parece correcta.Dividir y unir un archivo binario en java
Aquí está el código que estoy utilizando (me pueden enviar el código completo si se quiere):
para dividir:
File ifile = new File(fname);
FileInputStream fis;
String newName;
FileOutputStream chunk;
int fileSize = (int) ifile.length();
int nChunks = 0, read = 0, readLength = Chunk_Size;
byte[] byteChunk;
try {
fis = new FileInputStream(ifile);
StupidTest.size = (int)ifile.length();
while (fileSize > 0) {
if (fileSize <= Chunk_Size) {
readLength = fileSize;
}
byteChunk = new byte[readLength];
read = fis.read(byteChunk, 0, readLength);
fileSize -= read;
assert(read==byteChunk.length);
nChunks++;
newName = fname + ".part" + Integer.toString(nChunks - 1);
chunk = new FileOutputStream(new File(newName));
chunk.write(byteChunk);
chunk.flush();
chunk.close();
byteChunk = null;
chunk = null;
}
fis.close();
fis = null;
Y para unirse a archivo, puse los nombres de todos los trozos de una lista, a continuación, ordenar por nombre y luego ejecute el siguiente código:
File ofile = new File(fname);
FileOutputStream fos;
FileInputStream fis;
byte[] fileBytes;
int bytesRead = 0;
try {
fos = new FileOutputStream(ofile,true);
for (File file : files) {
fis = new FileInputStream(file);
fileBytes = new byte[(int) file.length()];
bytesRead = fis.read(fileBytes, 0,(int) file.length());
assert(bytesRead == fileBytes.length);
assert(bytesRead == (int) file.length());
fos.write(fileBytes);
fos.flush();
fileBytes = null;
fis.close();
fis = null;
}
fos.close();
fos = null;
El archivo es mucho menos de 2 GB, pero tiene razón sobre la parte de clasificación, está tomando 0,1,10,11,12 ..., 2,20, etc. Supongo que está estropeando esto –
¡Esto funciona! ¡Muchas gracias! –
De nada. – BalusC