2009-07-02 2 views
0

Java의 BufferedOutputStreams 및 DataOutputStreams에 대한 빠르고 쉬운 질문입니다.Java 네트워크 I/O 차단 여부

내가

myBufferedOutputStream.write(array); 
myDataOutputStream.write(array); 

같은 출력 스트림에 바이트 이러한 방법 스트림에 즉시이를 작성하고 반환하거나 그들도 차단해야합니까 쓰기?

글쓴이가 핵심 자바 문서에서 아무 것도 보지 못했지만 쓰기가 불가능하기 때문에 내 질문이 의미가 없습니까?

누군가 나를 똑바로 세우십시오.

감사합니다, jbu는

답변

0

나는 그것이 구현에 따라 다릅니다 생각합니다. BufferedOutputStream과 같은 것을 사용하는 경우, 클래스가 성능을 위해 버퍼링을 제공하므로 write()에 대한 호출은 "차단"되지 않습니다.

그러나 FileOutputStream를 사용하는 경우, 쓰기 호출 write()에 대한 호출이 실제로 소요되는 그 시간에 I/O 작업을 트리거 할 수 있기 때문에, 바쁜/사용할 수있는 I/O 리소스가 시스템에있는 방법에 따라 차단 될 수 있습니다 완료 할 시간.

1

java.io.*의 모든 읽기 및 쓰기 메소드가 차단 될 수 있습니다. 없음은 비동기 I/O를 지원합니다. 읽기 위해서는 수동으로 .available() 또는 유사한 메커니즘을 사용하여 구현해야합니다. 글쓰기를 위해서, 글쎄, 너 혼자 야.

1

java.io. * 패키지의 API가 차단 될 가능성이 있습니다. 그러나 동기식 I/O에 사용해야하는 Java NIO (New I/O 또는 Non-Blocking I/O)라는 특수 API가 있습니다. 패키지 java.nio의에서

봐 * 당신은 여기에 몇 가지 예를 찾을 수 있습니다. http://en.wikipedia.org/wiki/New_I/O

2

베드로의 대답은 최고였다, 그러나 그것은 잘못된 함께 시작하여 vitiated했다 : 아니, 그것은 "에 의존하지 않는 구현 ". 버퍼링의 전체 요점은 블로킹의 영향을 부드럽게하는 것이지만 버퍼가 가득 차고 출력 하드웨어가 준비되지 않은 경우 write()가 차단됩니다. 그러나 버퍼링 되었기 때문에 일반 바닐라 OutputStream보다 처리량에 훨씬 적은 영향을 미치고 훨씬 적은 시간을 차단합니다. 버퍼링은 성능을 크게 향상시키는 빠르고 쉬운 방법입니다.