2010-07-03 4 views
4

Guava를 사용하여 InputStreamBufferedReader으로 쉽게 변환 할 수 있습니까?Reader로 InputStream 열기

InputStream inputStream = ...; 
BufferedReader br = Streams.newBufferedReader(inputStream); 

나는 Files.newReader(File file, Charset charset)를 사용하여 파일을 열 수 있습니다

내가 좋아하는 뭔가를 찾고 있어요. 멋지다. 나는 InputStream을 사용하여 똑같이하고 싶다.

UPDATE :

CharStreams.newReaderSupplier 나를 위해 자세히 사용자 보인다 사용. 내가 도우미를 만들 수 있습니다 물론

final InputStream inputStream = new FileInputStream("/etc/fstab"); 
Reader bufferedReader = new BufferedReader(CharStreams.newReaderSupplier(new InputSupplier<InputStream>(){ 
     public InputStream getInput() throws IOException { 
     return inputStream; 
     } 
    }, Charset.defaultCharset()).getInput()); 

는 STH 좋아합니까 : 내가 잘못 해요,하지만 쉽게 구아바를 사용하여 BufferedReaderInputStream를 변환하기 위해 내가 그런 일을 할 필요가있는 경우 정정 해줘

return new BufferedReader(new InputStreamReader(inputStream)); 

그러나 나는 그러한 도우미가 Guava IO에 의해 제공되어야한다고 생각한다. 나는 File 인스턴스에 대해 그러한 트릭을 할 수있다. 왜 InputStream을 사용할 수 없습니까?

// Guava can do this 
Reader r = Files.newReader(new File("foo"), charset); 
// but cannot do this 
Reader r = SomeGuavaUtil.newReader(inputStream, charset); 

맞음 나 틀렸어도 API가 부족한 것 같습니다.

+1

나는 이것이 매우 * 공통적 인 것으로 당신에게 전적으로 동의하며, 구아바 같은 공통 라이브러리가 표준화한다면 위대 할 것입니다. –

답변

3

아니요, 구아바에는 그런 것이 없습니다. CharStreamsReader들과 Writer의 작업에 대한 일반적인 클래스이며 방법 InputStream의 공급 업체의 모든 종류의 유용 할 수

InputSupplier<InputStreamReader> newReaderSupplier(
    InputSupplier<? extends InputStream> in, Charset charset) 

있습니다.

분명히 new BufferedReader(new InputStreamReader(in, charset))으로 작성하거나 자신의 공장 방법으로 감쌀 수 있습니다.

편집 :

예, 당신은 이미 InputStream이 때 InputSupplier 버전을 사용하고 싶지 않을 것이다. 마치 Iterator 또는 Enumeration 또는 일부를 포함하는 것과 같이 실제로 한 번만 작동 할 수있는 Iterable을 만드는 것은 좋지 않은 생각입니다. 일반적으로 InputSupplier을 사용하면 s의 공급자 역할을 할 수있는 것으로 File을 생각하는 것과 같이 조금 다른 방식으로 I/O를 수행하는 방법을 고려해야합니다. 나는 InputSupplier을 사용하여 전체 요청을 서버로 랩핑하고 응답 내용을 InputStream으로 반환하여 구아바 유틸리티를 사용하여 파일을 복사 할 수있게했습니다.

어쨌든, 나는 완전히 CharStreams에는 InputStream에서 Reader을 생성하는 방법이 없기 때문에 왜 필요 없다고 느꼈는지는 확실합니다. 이 문제를 요청할 수 있습니다.

+0

+1 - OP가 자신의 응용 프로그램에 3 줄 도우미 메서드를 추가하는 것이 확실한 해결책입니다! –

+0

도우미 메서드를 만들지 않겠습니다. 그 때문에 구아바를 사용하고 있습니다. 공장 메서드 newReaderSupplier가 너무 자세한 정보입니다. 위의 질문에 설명을 추가하겠습니다. –

+1

Guava가 이미 원하는 것을 할 수있는 유틸리티가 있다면 좋겠지 만, 그렇지 않을 때는 구아바가 그러한 기능을 추가 할 경우 나중에이를 대체하고 대체 할 자신의 유틸리티를 만드는 것이 좋습니다. – ColinD

관련 문제