Próbuję podzielić plik binarny (np. Wideo/audio/obraz) na porcje o wielkości 100 kb każdy, a następnie połączyć te fragmenty, aby odzyskać oryginalny plik. Mój kod wydaje się działać, w tym sensie, że dzieli plik i łączy się z kawałkami, plik, który otrzymuję, ma ten sam rozmiar co oryginał. Problem polega jednak na tym, że zawartość zostaje obcięta - to znaczy, jeśli jest to plik wideo, zatrzymuje się po 2 sekundach, jeśli jest to plik obrazu, to tylko górna część wygląda poprawnie.Podziel i dołącz plik binarny do java
Oto kod używam (mogę pisać cały kod, jeśli chcesz):
do podziału:
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;
A do łączenia plików, umieścić nazwiska wszystkich kawałków w List, a następnie posortować je według nazwy, a następnie uruchom następujący kod:
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;
Plik jest znacznie mniejszy niż 2 GB - ale masz rację co do części sortującej, zajmuje ona 0,1,10,11,12 ..., 2,20 itd. - Zgaduję, że to zepsuje –
To działa! Wielkie dzięki! –
Nie ma za co. – BalusC