2012-03-17 4 views
0

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

например. файл ABC был разбит на 2 части, АВС1 и abc2 но проблема sizeof(ABC) является не равна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

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

+0

Я добавляю этот bouts.close() в свой код, но по-прежнему та же проблема возникает, когда я присоединяюсь к моему файлу, он не запускается, и данные все еще теряются. –

+0

Могу я видеть, где вы его добавляете? также добавьте код присоединения файла. –

+0

с close() мне нужно добавить flush(), после чего он работает. спасибо –

1

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

+0

, но мой фактический размер больше, чем фрагментированный размер файла. то есть данные теряются. –

Смежные вопросы