내 응용 프로그램의 일부에 InputStream이 주어지고 다른 InputStream을 생성하기 위해 일부 처리를 수행하려고합니다.java.util.stream.Stream을 <String>으로 java.io.Reader로 변환
try (
final BufferedReader inputReader = new BufferedReader(new InputStreamReader(inputStream, UTF_8), BUFFER_SIZE);
final Stream<String> resultLineStream = inputReader.lines().map(lineProcessor::processLine);
final InputStream resultStream = new ReaderInputStream(new StringStreamReader(resultLineStream), UTF_8);
) {
s3Client.putObject(targetBucket, s3File, resultStream, new ObjectMetadata());
} catch (IOException e) {
throw new RuntimeException("Exception", e);
}
은 내가 쉽게 내 처리 기능을 매핑 할 수가있는 스트림에 새로운 자바 8 BufferedReader.lines()
을 사용하고 있습니다.
아직 부족한 것은 StringStreamReader() 클래스입니다.이 클래스는 내 스트림을 Apache로 변환하는 Reader로 변환해야합니다. commons-io : ReaderInputStream은 InputStream을 다시 생성 할 수 있습니다. (독자와 위로 우회 인코딩과 줄 바꿈을 처리하기 위해 합리적인 것 같다.)
은 매우 명확하게하기 위해, 위의 코드 그래서
public class StringStreamReader extends Reader {
public StringStreamReader(Stream<String> stringStream) { ... }
@Overwrite
public int read(char cbuf[], int off, int len) throws IOException { ... }
// possibly overwrite other methods to avoid bad performance or high resource-consumption
}
가정 등 StringStreamReader 클래스를 제공하고있는 도서관이있다? 아니면 사용자 정의 Reader 또는 InputStream 서브 클래스를 구현하지 않고 위의 응용 프로그램 코드를 작성하는 또 다른 방법이 있을까요?
여기서 질문은 무엇입니까? – Frecklefoot
나는 이해하지 못한다. 이미 문자열이 있습니다. 다른 문자 인코딩이 필요한 이유는 무엇입니까? –
이것은 실제로 java.util.stream.Stream을 사용하는 방법이 아닙니다. –