Разбиение файлов на потерю данных - PullRequest
0 голосов
/ 17 марта 2012

Я написал программу для разбиения и объединения файлов.Когда я разбил файл на маленькие кусочки, я обнаружил, что размер меньшего файла не равен исходному, потеря данных составляет примерно 30-50 байт.и объединенный файл не работает правильно

например, файл ABC был разбит на 2 части, ABC1 и ABC2 , но проблемаis sizeof(ABC) is не равно sizeof(ABC1) + sizeof(ABC2).Под sizeof(ABC) я имею в виду с точки зрения Windows, то есть из диалогового окна свойств Windows.

Мой код:

for(int i =0;i<no_of_parts;i++)
{
       copied_data = 0;// a variable that count the no of byte transferred in the part of file
       fos = new FileOutputStream(jTextField2.getText()+"\\".part"+i);
       bouts = new BufferedOutputStream(fos);
       while((b = bins.read())!= -1)
       {
             bouts.write(b);
             copied_data++;
             if(copied_data==each_part_size_in_byte)
                break;
       }
}

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Как насчет закрытия вашего потока вывода?Он очистит буфер и освободит дескриптор файла, который вы используете.Звоните bouts.close().

1 голос
/ 17 марта 2012

Когда вы создаете файл, он создается в блоках памяти вместо отдельных байтов. Поэтому, когда вы делите файл на два, оба имеют размер в фиксированных блоках, который может превышать ваш фактический размер записанных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...