2012-01-12 7 views
2

BufferedOutputStream을 사용하는 경우 플러시를 사용할 때까지 실제 출력이 발생하지 않는다고 생각합니까? 어때요 BufferedInputStream, 거기에 플러시 방법은 무엇입니까?누구나 BufferedInputStream의 원리를 설명 할 수 있습니까?

+2

이리 와봐, 여유를 좀 줄여. 프로그래밍을 시작할 때 클라이언트와 서버의 차이점을 이해할 수 없었습니다. 이 질문은 그렇게 나쁘지 않습니다. – Raku

답변

1

플러시 방법이 없습니다. 플러시 메서드는 출력용입니다.

0

BufferedInputStream은 기본 스트림에 비교적 큰 청크로 데이터를 요청합니다. 생각하면 대용량 데이터 블록을 요청하는 것이 OS에 소량의 데이터를 여러 번 요청하는 것보다 효율적입니다.

필요가 없으므로 플러시 메서드가 없습니다 (쓰기가 없으므로 플러시 할 것이 없습니다).

3

플러시 란 버퍼의 전체 내용을 디스크에 쓰는 것을 의미합니다. 이는 에서까지 디스크를 쓰는 경우에만 의미가 있지만, 에서 읽는 경우에는 그렇지 않습니다.

어떤 사람들은 어떤 이유로 든 을 지우고 싶을 때 버퍼에서 버퍼를 지울 수 있습니다.

하지만 혼란을 방지하기 위해 쓰기 작업 플러시 및 읽기 동작 명확을 부를 것이다.

기본 지식을 배우는 동안 전문 용어와 정확한 음성이 중요합니다. 그 습관을 습득하십시오. 그것은 당신에게 많은 도움이 될 것입니다 :)

0

더 많은 데이터를 읽을 필요가있을 때마다 OS에서 read()가 있습니다. flush()와 같은 것이 없습니다.

가장 가까운 위치는 MemoryMappedByteBuffer에 있으며, 필요한 곳보다 먼저로드 할 영역을 트리거 할 수 있습니다.

3

BufferedOutputStream의 실제 출력은 내부 버퍼가 꽉 차거나 플러시 될 때 발생합니다.

BufferedInputStream에서는 의미가 없기 때문에 플러시가 발생하지 않습니다.

내부 버퍼에있는 기본 스트림에서 많은 데이터 덩어리를 읽는 것은 비용이 많이 드는 것으로 추정되며, 요청할 때 데이터의 작은 조각을 효율적으로 제공합니다. 버퍼링 된 데이터를 읽 자마자 기본 스트림에서 자동으로 다음 버퍼를 읽습니다. 그래서, 그 작업은 당신에게 전적으로 투명합니다.

0

선택 사항이 있다면 BufferedInputStream을 사용하십시오.이 스레드에 이미 나열되어있는 장점을 얻을 수 있으며 스트림을 "재사용"할 수있는 .mark() - 및 .reset() - Method를 구현합니다. (일종의).

관련 문제