2012-07-26 6 views
0

거대한 파일 (> 1GB)을 읽으려고하는데, 버퍼링 된 리더로 랜덤 액세스 파일을 읽는 것이 효율적 일 것이라고 생각합니다.버퍼링 된 리더로 랜덤 액세스 파일 읽기

내가 라인으로 파일 라인을 읽고는

그러나 JAVA IO API에 새로운 것을 분석 할 필요가있다, 나는이 작업을 수행 할 수있는 방법을 모르겠어요 ... 난 당신의 도움을 주셔서 감사합니다

.

+0

임의의 문자가 아닌 임의의 바이트 만 읽을 수 있습니다 (길이가 다를 수 있기 때문에).이 클래스가 잘 작동하지 않는다면 무엇을하려고합니까? –

+0

무엇을하려고합니까? 전체 파일을 읽을 필요가 있습니까? 파일 중간의 고정 오프셋에서 무언가를 읽으십니까?파일 중간에서 검색해야 할 내용을 읽으십시오. 당신은 단지 전체 파일을 "더 빨리"읽으려고하고 있습니까? Q : 해결하고자하는 "문제"는 정확히 무엇입니까? – paulsm4

+0

필자는 파일을 한 줄씩 읽고 파싱 할 필요가 있습니다. 가능한 한 빨리해야합니다. – user1203861

답변

3

당신이 자바의 BufferedReader로 사용할 수 있습니다 :

BufferedReader reader = new BufferedReader(new FileReader(fileName)); 
String line; 
while ((line = reader.readLine()) != null) { 
    // Do some stuff with the line 
} 

fileName 당신이 읽고 자하는 파일의 경로입니다.

+1

'FileReader' 주어진 파일이 기본 문자 인코딩으로 인코딩되었다고 가정합니다. 그렇지 않으면 말할 방법이 없습니다. – seh

0

모든 내용을 처음부터 읽어야합니까? 어떤 바이트를 시작할 지 알면 RandomAccessFile을 사용하여 파일의 다른 부분으로 이동할 수 있습니다. 나는 이것을하는 탐색 함수라고 생각한다.

유닉스 플랫폼에서 경우

, 당신은 로그의 GB를 통해 검색을위한 외부 쉘 스크립트를 사용할 수 있습니다 : 그것은 자바에서 완벽하게 행할 수 있지만

+0

내가 어디에서 시작하는지 신경 쓰지 마라. 내가 전체 파일 라인을 라인 단위로 읽는다면, – user1203861

+0

얇은 jayeff 대답이 가장 좋다. – RNJ

-1

, 내 경험을 바탕으로 제안하고 싶었다. sed은 이러한 목적에 매우 적합합니다. 여기의 특정 용도 : http://www.grymoire.com/Unix/Sed.html

로그 파일을 통해/grep을 읽을 때마다 자바 파일을 통해 쉘 스크립트를 호출하십시오.

어떻게?

1) Java 코드에서 ProcessBuilder 클래스를 사용하십시오. 이 인수는

ProcessBuilder obj = new ProcessBuilder("FastLogRead.sh");

2 생성자로) 쉘 스크립트를 가지고 당신은이를 통해 직접 BufferedRead,이 쉘의 출력을 읽을 수

Process process = obj.start();

3) 프로세스에 대한 개체를 만들 수 있습니다

BufferedReader br=new BufferedReader(new InputStreamReader(process.getInputStream()));

장점 :

평균 실행 속도가 빠릅니다.

일부 개발자들은 따라서 자바의 RandomAccessFile 가고 싶어요, 자바의 영역에서 경량 쉘 스크립트에 가져 좋아하지 않는다 : 10 배

단점을 (I 4GB의 로그 파일 주위를 통해 검색). 이것은 정당화된다.

표준화와 성능 중에서 선택할 수 있습니다.

관련 문제