Java IO (Javase 6)- 스트림 및 작가의 샘플 사용 효과를 이해하도록 도와주세요.

StackOverflow https://stackoverflow.com/questions/2243441

  •  19-09-2019
  •  | 
  •  

문제

BufferedWriter out = new BufferedWriter( new OutputStreamWriter( new BufferedOutputStream( new FileOutputStream("out.txt") ) ) );

그래서 내가 이것을 이해하는지 보자 : "out.txt"파일에 대한 바이트 출력 스트림이 열립니다. 그런 다음 버퍼링 된 출력 스트림에 공급되어 파일 작업을 더 빨리 만들 수 있습니다. 버퍼링 된 스트림은 출력 스트림 작성자에게 공급되어 바이트에서 문자로 연결됩니다. 마지막으로,이 작가는 버퍼링 작가에게 공급됩니다 ... 다른 층의 버퍼링을 추가합니까?

흠...

도움이 되었습니까?

해결책

그래 너가 옳아.

이 경우 더 짧게 할 수 있다고 생각합니다 (또한 참조하십시오. 완충 작가)

BufferedWriter out = new BufferedWriter(new FileWriter("foo.out"));

또는 멋진 인쇄 기능을 원한다면 :

printwriter out = new printwriter (New BufferedWriter (새로운 filewriter ( "foo.out")));

아마도 그럴 수 있습니다 FileWriter 자체 포장을 만들지 만 해당 클래스는 어떤 방법이 가장 좋은지 알 것입니다.

Java에서 스트림과 작가는 래퍼이므로 자신의 요구에 맞게 조립할 수 있습니다 (당신처럼 쌓아 놓을 수 있습니다). 수업은 그들이 어떤 유형의 스트림/작가를 쌓아 보지 않습니다. 귀하의 경우 여러 버퍼가 있으면 실제로 두 개의 다른 클래스에 두 개의 버퍼가 있다는 것을 의미합니다. 이것은 그들이 여분의 메모리와 성능 손실을 취할 것이라는 것을 의미하지만, 다른 성능 요소에 비해 약간의 오버 헤드 일 수 있기 때문에 이것을 눈치 채지 못할 가능성이 높습니다.

다른 팁

이것은 다음의 예입니다 데코레이터 패턴. 아이디어는 클래스를 수정하지 않고 클래스에 기능을 추가하는 것입니다. 당신의 예에는 filewriter가 있습니다. 글을 쓰기 전에 먼저 쓰는 모든 것을 버퍼링하기를 원합니다 (네트워크를 통해 좋은 아이디어). 그래서 당신은 filewriter 위에 버퍼링 라이터를 레이어입니다. 다른 앱은 데이터를 버퍼링하기를 원하지 않으므로 개발자가 버퍼링 라이터를 추가 할 필요가 없습니다.

우리는 모든 개발자에게 필요한 것을 기대할 수 없습니다. 당신이 필요하다고 말하십시오 rot13 귀하의 데이터는 이제 filewriter를 수정하는 대신 작가를 구현하는 클래스 호출 Rot13Writer를 만듭니다. Rot13Writer는 작가의 인스턴스를 취하고 다음 작가에게 전달하기 전에 ROT13을 공연 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top