2012-03-17 37 views
0

我寫了一個文件分割和加入的程序。當我將文件分成小塊時,我發現較小文件的大小與原始大小不相等,會丟失大約30-50個字節的數據。並且組合文件不能正確運行文件分割丟失數據

例如,一個文件ABC被分成了兩個部分,ABC1ABC2但問題是 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(),但仍然存在相同的問題,當我加入我的文件時,它不運行,數據仍然丟失。 – 2012-03-17 12:58:35

+0

我可以看到你添加它的位置嗎?還要添加文件加入的代碼。 – 2012-03-17 13:03:52

+0

用close()我需要添加flush(),之後它工作。謝謝 – 2012-03-17 13:11:12

1

當你創建一個文件,它的記憶,而不是單個字節的塊被創建。所以當你把文件分成兩份時,它們都有固定塊的大小,可能比你寫入數據的實際大小要大。

+0

但我的實際尺寸大於碎片文件大小。即數據丟失。 – 2012-03-17 12:57:49