2012-03-17 5 views
0

파일 분할 및 결합을위한 프로그램을 작성했습니다. 파일을 작은 조각으로 나누었을 때 작은 파일의 크기가 원래 파일의 크기와 같지 않다는 것을 알게되면 약 30-50 바이트의 데이터가 손실됩니다. 결합 된 파일이 올바르게 실행되지 않습니다.데이터의 파일 분할 손실

예 : 파일 ABC 2 개 부분 ABC1 및 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

어디에 추가 할 수 있습니까? 또한 파일 합류 코드를 추가하십시오. close()가있는 –

+0

은 flush()를 추가해야만 작동합니다. 덕분에 –

1

당신이 파일을 만들 때, 그 대신 개별 바이트의 메모리 블록에 생성됩니다. 따라서 파일을 두 개로 나눌 때 둘 다 고정 블록으로 크기가 지정되어 실제 데이터 크기보다 커질 수 있습니다.

+0

하지만 실제 크기는 조각난 파일 크기보다 큽니다. 즉 데이터가 손실됩니다. –