私のアプリケーションの一部に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);
}
私は簡単に私の処理機能をマッピングすることができ、その上にストリームに新しいJava 8 BufferedReader.lines()
を使用しています。
まだ唯一欠けているのは、StreamStreamReader()です。これは、ストリームをReaderに変換することになっています。このストリームから、Apacheの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'がどのように使用されるのかではありません。 –