문제

다음보다 Java의 출력에 대한 입력을 "파이핑"하기위한 더 간결한/표준 관용구 (예 : JDK 방법)가 있습니까?

public void pipe(Reader in, Writer out) {
    CharBuffer buf = CharBuffer.allocate(DEFAULT_BUFFER_SIZE);
    while( in.read(buf) >= 0 ) {
      out.append(buf.flip());
      buf.clear();
    }
}

편집] 참고하십시오 Reader 그리고 Writer ~이다 주어진. 정답은 취하는 방법을 보여줍니다 in 그리고 out 파이프를 형성합니다 (바람직하게는 1 또는 2 메소드 호출을 초과하지 않음). 나는 어디에서 답을 받아 들일 것이다 in 그리고 out an InputStream 그리고 OutputStream (바람직하게는/~ 전환으로 Reader/Writer). 나는 어디에서나 답을 받아들이지 않을 것입니다 in 또는 out a 아강Reader/InputStream 또는 Writer/OutputStrem.

도움이 되었습니까?

해결책

ioutils Apache Commons 프로젝트에는 여러 가지가 있습니다 우연히 방법 그것은 당신이 필요한 것을 정확하게합니다.

IOUtils.copy(in, out) 출력에 대한 모든 입력의 버퍼링 된 사본을 수행합니다. 코드베이스에 필요한 지점이 두 개 이상인 경우 Stream 또는 Reader/Writer 취급, ioutils를 사용하는 것이 좋습니다.

다른 팁

보세요 java.io.pipedInputStream 그리고 pipedoutputStream, 또는 PipedReader/파이프 라이터 같은 패키지에서.

PipedInputStream의 문서에서 :

파이프 입력 스트림은 파이프 출력 스트림에 연결해야합니다. 파이프 입력 스트림은 파이프 출력 스트림에 기록되는 데이터 바이트를 제공합니다. 일반적으로 데이터는 하나의 스레드로 PipedInputStream 객체에서 읽히고 데이터는 다른 스레드에 의해 해당 PipedOutputStream에 기록됩니다. 단일 스레드에서 두 객체를 사용하려고 시도하는 것은 스레드에 교착 상태가 될 수 있으므로 권장되지 않습니다. 파이프 입력 스트림에는 제한 내에서 쓰기 작업에서 읽기 작업을 해체하는 버퍼가 포함되어 있습니다. 연결된 파이프 출력 스트림에 데이터 바이트를 제공하는 스레드가 더 이상 살아 있지 않으면 파이프가 파손된다고합니다.

사용 가능한 유일한 최적화는 NIO API의 FileChannels를 통한 것입니다. 읽습니다, 쓴다. JVM 은이 호출을 최적화하여 데이터를 먼저 커널 공간으로 이동하지 않고도 파일에서 대상 채널로 데이터를 이동할 수 있습니다. 보다 이 기사 자세한 내용은.

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