2012-05-06 7 views
0

"offset"에서 파일의 일부 바이트를 읽고 싶고 it'length는 "size"입니다.오류 : indexoutofbound. 파일의 일부 바이트를 읽을 때

byte[] data = new byte[size]; 
FileInputStream fis=new FileInputStream(inputFile); 
System.out.println("offset:"+offset+","+"size:"+size); 
fis.read(data, offset, size); 

그래서 내가 오프셋과 크기의 진정한 가치를 가지고,하지만 난 오류 수신기 : indexoutofbound를 그래서 내가 FileInputStream에이 코드를 사용합니다. 나는 이해하지 못한다. 아무도 내가 떨어지는 법을 보여줄 수 있고 그것을 할 수있는 다른 올바른 방법이있을 수 있습니까?

+0

은 fis.read (데이터, 오프셋, 크기)가 아니며 fis.read (데이터, 오프셋, 크기 -1)이어야합니다. –

답변

1

JavaDoc 당신을 알려줍니다

public int read(byte[] b, int off, int len) throws IOException 

Throws: 
    IndexOutOfBoundsException - If off is negative, len is negative, or len is 
    greater than b.length - off 

는 인덱스 0 기반 있음을 유의하십시오.

0

여기에 offset에 무엇이 있는지 잘 모르겠지만 offset은 바이트를 저장하려는 배열의 오프셋 (즉, 시작 색인)을 의미합니다.

바이트를 offset 위치에서부터 배열로 읽으려고 시도하므로 offset > 0 인 경우 IndexOutOfBounds이됩니다. offset이 0이어야하며 정상적으로 작동합니다.

+0

예! 당신 말이 맞아요! :) 당신의 설명 주셔서 감사합니다. 오프셋 및 크기 매개 변수를 혼동합니다. 나는 파일의 오프셋을 생각했으나 실제로는 배열의 오프셋이다. 그래서 파일에서 오프셋과 마지막 크기의 바이트를 읽는 간단한 방법이 있습니까? – Kiradev

+0

'read' 메서드는 읽은 바이트 수를 반환합니다. 연속 된 읽기와 함께 파일 크기를 계산하거나 입력 데이터를 다른 형식으로 변환 할 수 있습니다. – craigmj

+0

답변 해 주셔서 감사합니다. – Kiradev

관련 문제