2009-07-06 4 views

답변

11

당신이 가진 것이 반드시 가장 빠르지는 않지만, 간단합니다. 실제로, 나는 꽤 양식을 사용하지 않을거야 - 내가 charset을 지정할 수있는 뭔가를 사용하고 싶습니다.

// Why is there no method to give this guaranteed charset 
// without "risk" of exceptions? Grr. 
Charset utf8 = Charset.forName("UTF-8");  
BufferedReader input = new BufferedReader(
          new InputStreamReader(
           new FileInputStream("filename"), 
           utf8)); 

NIO를 사용하면 더 빠르게 진행할 수 있지만 실제로 문제가 발생할 때까지는 그렇지 않을 것입니다. 문제가 보이지만 다른 일을하고있는 경우 의 데이터는 문제가 아닌지 먼저 확인하십시오. 에 프로그램을 작성하여 파일을 읽으십시오. 실행 사이에 파일 시스템 캐시를 지우려면 상자에서 취하는 모든 작업을 잊지 마세요.

+1

Re comment : 예! –

+1

어떻게 InputStream을 인스턴스화 할 수 있습니까? –

+0

@jpartogi 나는 이것이 FileInputStream이어야한다고 생각한다. ... – jsh

1

java.nio.channels.FileChannel을 살펴보십시오.

0

다른 옵션을 벤치마킹 해 보셨습니까? 매우 작은 파일처럼 BufferedReader를 사용하지 않는 것이 더 빠를 수도 있습니다. 최소한 작은 벤치 마크에서는 일반적인 사용 사례와 함께 작동하는 가장 빠른 구현을 찾아야합니다.

0

읽고 싶은 내용에 따라 다릅니다. 전체 파일 또는 특정 위치에서이를 처리 할 수 ​​있어야합니까, 아니면 한 번에 전체 텍스트를 읽을 수 있습니까?

3

/fast/원할 경우 문자 데이터를 인코딩 된 형식으로 유지하십시오 (UTF-16을 의미하지는 않습니다). 디스크 I/O가 일반적으로 느리지 만 (캐시되지 않은 경우) 데이터를 디코딩하고 두 번 유지하는 것도 문제가 될 수 있습니다. 가장 빠른로드는 java.nio.channels.FileChannel.map(MapMode.READ_ONLY, ...)을 통해 이루어 지지만 할당 해제에 심각한 문제가 있습니다.

일반적인주의 사항이 적용됩니다.

0
File file = new File("querySourceFileName"); 
Scanner s = new Scanner(file); 
while (s.hasNext()) { 
    System.out.println(s.nextLine()); 
} 
+0

이것은 파일을 읽는 가장 명확하고 간단한 방법입니다. 하지만 정말로 속도면에서 경쟁 할 수 있다고 생각합니까? – phineas

관련 문제