2012-05-21 2 views
2

바이트 단위로 파일을 읽으려고합니다. 문제는 자바가 내가 16 진수 편집기를 사용하여 읽을 수있는 바이트가 아니라는 것을 보여줍니다. 자바를 사용 00 00 00 17 00 00 00 29 00 00 00 99 00 00 00 9BJava를 사용하여 바이트 단위로 파일을 읽을 때 예상하지 못한 바이트

읽기 바이트 :

읽기 바이트 극동 사용 0 0 0 17 0 0 0 29 0 0 0 22 0 0 0 3A

자바 코드 :

while ((line = (byte) _br.read()) != -1) { 
    lines.add(line); 
    System.out.println("lines = " + Integer.toHexString(line)); 
} 
+3

여기서 몇 가지 암시 적 변환을 수행하고 있습니다. 행 목록의 유형은 무엇입니까? 나는 9B와 99가 모두 127을 넘기 때문에 문제가 signed/unsigned overflow와 같다고 생각한다. – zeller

+0

감사합니다. 문제가 해결되었습니다! –

답변

1

당신은 너무 빨리 바이트 read()에 의해 반환되는 정수로 변환된다. 이로 인해 오버플로가 발생하고 파일 검사의 -1 종료가 현재 문제의 최상위에서 작동하지 않을 수 있습니다. 반환 된 값이 0에서 65535 사이 인 (byte 변수로 처리 할 수 ​​없다는) 문서. 자바에서는 바이트가 8 비트 값으로 부호가 매겨 지므로 값이 0x7F보다 클 때마다 문제가 발생합니다. line 변수 유형을 int로 변경하고 다시 시도하십시오.

관련 문제