2013-09-22 1 views
5

자바 6에서 RandomAccessFile을 사용하고 있지만 바이트를 읽을 때 이상한 동작이 있습니다. offsetdata가 적절하게 초기화 다음 코드와Java의 읽기 바이트를 사용할 때 IndexOutofBounds

:

int offset; 
byte data[]; 
randFile.readFully(data, offset, data.length); 

나는 다음과 같은 스택 추적 얻을 : offsetdata 같은 값

null 
java.lang.IndexOutOfBoundsException 
    at java.io.RandomAccessFile.readBytes(Native Method) 
    at java.io.RandomAccessFile.read(RandomAccessFile.java:355) 
    at java.io.RandomAccessFile.readFully(RandomAccessFile.java:414) 

하지만을의 다음 (겉으로보기에 동일한) 코드가 잘 작동합니다!

randFile.seek(offset); 

for (int i = 0; i < (data.length); i += 1) { 
    data[i] = randFile.readByte(); 
} 

누구에게 이것이있을 수 있는지에 대한 통찰력이 있습니까?

+1

bytes.- data.length - offset을 읽어야? – ssantos

답변

6

그냥 짐작할 만하지 만, offset0보다 커야합니다. 0보다 큰 위치에서 시작하여 data.length 바이트를 읽는 경우 을 던지는 data 배열의 끝 부분을 전달합니다.

따라서 전체 배열을 읽으려면 offset 변수를 0으로 설정해야합니다. 당신은 0에서 시작하지 않으려면 게다가, 당신은 offset``가 어떤 값

randFile.readFully(data, offset, data.length - offset); 
+0

나는 당신이 옳다고 생각한다. offset 매개 변수를 파일 포인터의 오프셋으로 오해했습니다. 그러나 설명서에는 현재 파일 포인터에서 데이터가 읽혀진다는 내용이 나와 있습니다. – jaynp

+0

이것이 마침내 문제가 되었다면, upvoting/accepting answer를 고려해보십시오. 다른 사용자에게 유용 할 수 있습니다. – ssantos

+0

여기에 똑같은 문제가있었습니다! 문서 전체를 오해하여 파일에 오프셋이 있다고 생각했습니다. – wayway

관련 문제