2013-02-21 4 views
2

모든 것을 메모리에 보관하지 않고 나중에 언제든지 (매우 큰) 파일을 열고 임의의 지점에서 데이터를 읽을 수 있기를 원합니다.어떻게 읽을 수 있도록 파일을 열어 두어야합니까?

이것이 가능합니까?

파일에 대한 핸들을 열고 싶습니다.이 파일을 읽고 쓰는 것이없고 파일을 다시 검색하지 않고 나중에 특정 오프셋 길이 인 & 길이의 데이터를 가져올 수 있습니다. .

내가 먼저가 난 후,하지만 문서가 제안 어떤 것 BufferedReader.mark처럼 보였다에서

1, open handle to file 
2, create reader 
3, skip reader to X 
4, read for Y 
5, reset reader to 0 
6, return to step 3 

의 일종이있을 것입니다 가정었던 나는 표시된 곳에서 내용에를 mark, skip, read, reset 경우 나는 건너 뛴 곳에서 기억에 남을 것입니까? 워드 프로세서

, 여전히 마크를 유지하면서 읽을 수있는 문자의 수에

제한. 이 제한 또는 그 이상까지 자를 읽은 후에 스트림을 재설정하려는 시도가 실패 할 수 있습니다. 보다 큰 한계 값이 입력 버퍼의 크기보다 크면 새 버퍼가 크기가 한계보다 작지 않은 이 할당됩니다. 따라서 큰 값 을주의해서 사용해야합니다.

"읽음"이라고 말하면 내가 건너 뛰면이 한계 (계산 됨)에 포함되지 않지만 꽤 많이 읽을 수 있으므로이 새로 할당 된 입력 버퍼가 꽤 커. 나는 그런 일이 일어나기를 원하지 않습니다. ...

더 좋은 방법이 있을까요?

+0

RandomAccessFile을 사용하려는 것 같습니다. –

답변

6

아마도 RandomAccessFile 클래스를 찾고있을 것입니다.

+0

그냥 두 번째 발견, 정확히 내가 뭘했는지, 고마워. –

1

당신이 SeekableByteChannel, 새로운는 ByteChannel를 포함 자바 7 사용하는 경우 다른 옵션을 선택합니다. 이 채널은 현재 위치를 유지하므로이 위치에서 읽고 쓸 수 있습니다. 그것은 임의 접근 위치를 허용합니다.

SeekableByteChannel - SeekableByteChannel는 ByteChannel는 연장 및 유지하고 접속 된 하부 엔티티에 현재의 위치를 ​​변경할 수있다. 여기에는 기본 엔터티 의 크기를 가져 오는 메서드가 있거나 허용되는 경우 지정된 크기로 자릅니다.

0

RandomAccessFile.seek (long position) 및 FileChannel.position (long position)은 데이터를 읽거나 쓰는 파일 위치를 설정할 수 있습니다.

관련 문제