Ein Teil meiner Anwendung ist ein InputStream gegeben und möchte auf diesem eine Verarbeitung durchführen, um einen anderen InputStream zu erzeugen.Umwandlung eines java.util.stream.Stream <String> in einen 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);
}
Ich bin mit dem neuen Java 8 BufferedReader.lines()
in einen Stream, auf die ich einfach meine Verarbeitungsfunktion abbilden kann.
Das einzige, was noch fehlt, ist die Klasse StringStreamReader(), die meinen Stream in einen Reader verwandeln soll, aus dem Apache commons-io: ReaderInputStream wieder einen InputStream erzeugen kann. (Der Umweg an die Leser und wieder scheint vernünftig mit Kodierungen und Zeilenumbrüche zu befassen.)
Um sehr klar zu sein, über den Code geht davon aus
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
}
So gibt es eine Bibliothek, die eine solche StringStreamReader Klasse bietet? Oder gibt es eine andere Möglichkeit, den obigen Anwendungscode zu schreiben, ohne eine benutzerdefinierte Reader- oder InputStream-Unterklasse zu implementieren?
Was ist die Frage hier? – Frecklefoot
Ich verstehe nicht. Sie haben bereits Zeichenfolgen, warum brauchen Sie eine andere Zeichencodierung? –
Dies ist wirklich nicht wie 'java.util.stream.Stream' verwendet werden soll. –