2012-07-16 1 views
1
나는 다음과 같은 코드를 실행 해요

의 끝 부분에 반환 값 : 워드 프로세서에 따르면자바 InputStream.skip() 파일

public class SkipTest { 
    public static void main(String[] args) throws IOException { 
     FileOutputStream fileout = new FileOutputStream("./foo"); 
     DataOutputStream output = new DataOutputStream(fileout); 
     output.writeLong(12345678L); 
     output.writeLong(87654321L); 
     output.writeInt(1234); 
     output.flush(); 
     output.close(); 

     FileInputStream input = new FileInputStream("./foo"); 
     DataInputStream datain = new DataInputStream(input); 

     System.out.println(datain.readLong()); 
     System.out.println(datain.readLong()); 

     long skipped = datain.skip(8); 
     System.out.printf("Attempting to skip 8 bytes, actually skipped %d.\n", skipped); 

     datain.close(); 
    } 
} 

.skip()의 반환 값은 수도, 실제 바이트 수를 건너입니다 요청한 수보다 작아야합니다. 나는 파일이 외부에서 20 바이트 것을 확인하지만, 한 나는 다음과 같은 출력을 얻을 위에 내가 코드를 실행하면

12345678 
87654321 
Attempting to skip 8 bytes, actually skipped 8. 

그래서이 버그가 아니면 내가 뭔가 잘못하고있는 중이 야를? 파일에 4 개만 남았을 때 어떻게 8 바이트를 건너 뛸 수 있습니까?

답변

3

는데 DataInputStream 스킵의 구현을 위해 다음과 같은 클레임 또는 FileInputStream 통해 아래로 통과 백업 파일의 EOF를 벗어난 바이트 수를 포함 할 수 있습니다. 끝에서 건너 뛴 후에 스트림에서 읽으려고하면 파일의 끝을 나타내는 -1이 표시됩니다. "

+0

감사합니다. 필자는 InputStream 용 문서 만보고 있었고 FileInputStream을 확인하지는 않았습니다. 나는 여전히 반환 값이 "건너 뛴 실제 바이트 수"라고 오도하는 것 같다고 생각합니다. – job

1

아무 것도 읽지 않고 FileInputStream의 임의의 바이트 수를 건너 뛸 수 있습니다. 커서 위치를 변경하면 다음 읽기가 실패합니다. 시도해보십시오 datain.skip(Integer.MAX_VALUE). .

"보다 백킹 파일에 잔류되는 바이트 이상을 스킵 할 수있다이 방법이 예외 스킵 바이트 수를 생성 없음