2013-08-16 2 views
0

이 코드는 기본적으로 버퍼링 된 작성기를 통해 파일에 쓰는 코드입니다. JDK 1.5를 사용하고 있습니다. 이제는 기본적으로이 코드가 완벽하게 작동하고 파일에 쓰게됩니다. 파일이 크다. 파일의 최종 크기가 약 1GB라고 말하는가? 이제 JDK 1.5의 Java가 제공하는 다른 대안이있어 파일 작성 프로세스가 훨씬 빨라지고 성능이 향상 될 수 있습니까?파일 쓰기 프로세스가 더욱 빨라졌습니다.

File file = new File(FilePath + getFileName()); 
try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { 
    for (Posuser posuser : totalusers) { 
    for (potook bk : books) { 
     if ((posuser.getUpdatedBy() == null) 
      && (posuser.getUpdateddateformat() == null)) { 
     bw.write("aaa"+"\r\n"); 
     } else if (posuser.getUpdatedBy() == null 
        && posuser.getUpdateddateformat() != null) { 
     bw.write("bbb+"\r\n"); 
     } else if (posuser.getUpdatedBy() != null 
        && posuser.getUpdateddateformat() == null) { 
     bw.write("ccc"+"\r\n"); 
     } else { 
     bw.write("ddd"+\r\n"); 
     } 
    } 
    } 
} catch (IOException, AnotherException e) { 
    logger.error(e.getMessage()); 
} 

답변

1

나는 java.nio 패키지를 확인합니다. This SO question/answer 세부 정보 더. 성능이 향상됩니다.

큰 파일 크기에서의 경험으로 볼 때 java.nio는 java.io보다 더 빠름 입니다. 단단히 빨리. > 250 % 범위와 같습니다.

+0

당신은 JDK 1.5 –

+1

예 http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/package-summary.html에있다 NIO이다 알려 주시기 바랍니다 수 – Will

+0

[한 연구는] (http://java.dzone.com/articles/file-copy-java-%E2%80%93-benchmark)에 따르면 nio의 장점은 일단 거대한 파일에 도착하면 거의 사라집니다. OP가 얘기하고 있습니다. @RamKumar - Java 1.5에서 nio를 다르게 사용해야하지만 (java.nio.files 패키지 없음), 필수 요소가 있습니다. 'java.nio.channels'을보십시오. Java 1.5에서 nio를 사용하는 방법을 보여주는 웹의 오래된 튜토리얼을 찾아야 할 것입니다. –

0

BufferedWriter를 사용하는 것만으로는 충분하지 않습니다. 버퍼 크기 (두 번째 생성자 매개 변수)를 조정해야합니다. 버퍼가 클수록 성능이 향상됩니다. 그러나 버퍼 크기를 1MB로 설정하면이 코드의 동시 호출 번마다 에 1MB의 RAM을 예약하는 것이 중요하지 않음을 기억하십시오. 또한 Brian의 답변 (java.nio 패키지)은 매우 훌륭합니다. 두 가지를 결합하십시오 : java.nio로 변경하고 유스 케이스를 찾을 때까지 버퍼 크기를 조정하십시오.

+0

또한 FileWriter를 사용하는 대신 스트림 레벨에서 버퍼를 사용하여 성능을 향상시킬 수도 있습니다. –

+0

@TedHopp 또한 1GB의 파일을 작성하기 위해 생성자에 입력 할 수있는 적절한 버퍼 크기를 알려주십시오 –

+0

@RamKumar - 확실히 말하기 어렵습니다. 이는 벤치마킹에 의해 가장 잘 결정되며 실행 환경 및 시스템로드에 따라 달라집니다. 가장 좋은 버퍼 크기는 아마도 디스크 블록 크기의 배수 일 것입니다. 'BufferedWriter'의 기본 버퍼 크기는 8192 (8KB)라고 생각합니다. –

1

적어도 메모리는 효율적이어야합니다. Blog: String intern 문자열 +은 값 비싼 작업이므로 StringBuilder을 대신 사용해야합니다.

final String aaaString = "aaa".intern(); 
    final String bbbString = "bbb".intern(); 
    final String cccString = "ccc".intern(); 
    final String dddString = "ddd".intern(); 
    final String EOL = "\r\n".intern(); 

    File file = new File(FilePath + getFileName()); 
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { 
     for (Posuser posuser : totalusers) { 
     for (potook bk : books) { 
      if ((posuser.getUpdatedBy() == null) 
       && (posuser.getUpdateddateformat() == null)) { 
      bw.write(aaaString); 
      bw.write(EOL); 
      } else if (posuser.getUpdatedBy() == null 
        && posuser.getUpdateddateformat() != null) { 
      bw.write(bbbString); 
      bw.write(EOL); 
      } else if (posuser.getUpdatedBy() != null 
        && posuser.getUpdateddateformat() == null) { 
      bw.write(cccString); 
      bw.write(EOL); 
      } else { 
      bw.write(dddString); 
      bw.write(EOL); 
      } 
     } 
     } 
    } catch (IOException, AnotherException e) { 
     logger.error(e.getMessage()); 
    } 
+0

고마워요.이 작은 것들이 중요합니다. –

+0

또한 (aaaString + bbbString)을 제안하면 어떻게하면 더 많은 메모리를 효율적으로 만들 수 있습니까? –

+1

하나씩 작성하지 마십시오. 'bw.write (aaaString); bw.write (bbbString);' –