나는 BufferedOutputStream
의 이론을 이해합니다. 바이트가 꽉 찰 때까지 버퍼 배열에 기록 된 다음 기본 스트림에 기록 (플러시)됩니다. 즉, OS 호출이 적을수록 바이트 단위로 기록하는 것이 더 빠릅니다.BufferedOutputStream은 실제로 낮은 수준에서 어떻게 작동합니까?
그러나, BufferedOutputStream
클래스 및 메서드 (BufferedOutputStream.java)의 구현을 살펴보면 궁극적으로 버퍼의 바이트가 바이트 단위로 기록됩니다.
난이 경우 생각 때문에 : BufferedOutputStream.write에서
(바이트 B [] 오프 INT, INT LEN)가있는 라인 out.write (b 오프 렌). out는 OutputStream의 인스턴스이기 (위해) 때문에, BufferedOutputStream는 아니기 때문에 OutputStream.write (byte [], int, int)를 호출하고 있습니다. 이것은 for 루프를 사용하여 바이트 단위로 작성합니다.
실제로 진행되고있는 작업과 그 작업이 더 빠른 방법을 명확히 할 수 있습니까? 귀하의 링크에서
버퍼'out.write (바이트 오프셋, 길이)를 사용하여 플러싱'어떻게 그 바이트 단위? 더 자세하게 얘기해 주 시겠어요? –
그러나 Out.write (bytes, offset, length)는 OutputStream.java에서 write (byte b [], int off, int len) 메서드를 호출하지 않습니까? 그런 다음 for 루프를 사용하여 버퍼의 각 바이트를 개별적으로 씁니다. – user1209776
'OutputStream'은 추상적입니다. 대부분의 서브 클래스는이 메소드를보다 효율적인 버젼으로 오버라이드 (override)합니다. 예를 들어 [FileOutputStream] (http://www.docjar.com/html/api/java/io/FileOutputStream.java.html)을보십시오. –