2017-01-31 1 views
1

FileOutputStreamBufferedOutputStream에서 write(byte[]) 메서드를 사용할 때 실제 성능 차이가 있습니까?FileOutputStream 대 BufferedOutputStream에서 쓰기 (byte []) 테스트

내가 500 메가 바이트 파일을 작성하는 HDD에 모두 테스트 결과는 13, 12 초였다 :

try(FileOutputStream out = new FileOutputStream(filePath1)) { 
      out.write(readBytes); 
} 

하고,

try(BufferedOutputStream out = new BufferedOutputStream( 
          new FileOutputStream(filePath2))) { 
      out.write(readBytes); 
} 

내가 약 BufferedOutputStream 효율성을 무엇을 놓치고?

답변

2

BufferedOutputStream은 한 번에 조금씩 데이터를 쓰는 것이 더 효율적입니다. "충분한"데이터가있을 때까지 쓰기를 일괄 처리합니다.

버퍼를 채울 수있는 충분한 데이터가 있으므로 모든 것을 한 번에 작성하면 아무런 차이가 없습니다. 또는 데이터의 끝에 도달하여 스트림을 닫아야합니다.

+0

그래서 바이트 단위로 쓰기 만하면됩니다. 즉 write (int b)? – user963241

+0

한 번에 하나씩있을 필요는 없습니다. 그것은 단지 버퍼 크기 (디폴트로 8192)보다 작 으면됩니다. –

+0

부록으로서, 기입 해지는 배열 (fragment)가 버퍼 사이즈와 같거나 크다면,'BufferedOutputStream'는 방해가되어 배열을 타겟 스트림에 직접 건네줍니다. 따라서 최악의 경우 버퍼 크기보다 약간 작은 덩어리를 반복적으로 쓰는 것이 목표 대상 쓰기 작업의 수를 크게 줄이지는 않지만 복사 오버 헤드를 추가하는 것입니다. 이 경우'BufferedOutputStream' *은 성능을 감소시킵니다. – Holger