StreamConverters.asInputStream
Create a sink which materializes into an InputStream
that can be read to trigger demand through the sink.
Additional Sink and Source converters
Signature¶
StreamConverters.asInputStream
Description¶
Create a sink which materializes into an InputStream
that can be read to trigger demand through the sink. Bytes emitted through the stream will be available for reading through the InputStream
The InputStream
will be ended when the stream flowing into this Sink
completes, and the closing the InputStream
will cancel the inflow of this Sink
.
Reactive Streams semantics¶
cancels when the InputStream
is closed
backpressures when no read is pending on the InputStream
Example¶
Here is an example of a Sink
that reads the contents from the source, converts it into uppercase and materializes into a java.io.InputStream
sourceval toUpperCase: Flow[ByteString, ByteString, NotUsed] = Flow[ByteString].map(_.map(_.toChar.toUpper.toByte))
val source: Source[ByteString, NotUsed] = Source.single(ByteString("some random input"))
val sink: Sink[ByteString, InputStream] = StreamConverters.asInputStream()
val inputStream: InputStream = source.via(toUpperCase).runWith(sink)
sourceCharset charset = Charset.defaultCharset();
Flow<ByteString, ByteString, NotUsed> toUpperCase =
Flow.<ByteString>create()
.map(
bs -> {
String str = bs.decodeString(charset).toUpperCase();
return ByteString.fromString(str, charset);
});
final Sink<ByteString, InputStream> sink = StreamConverters.asInputStream();
final InputStream stream =
Source.single(ByteString.fromString("Some random input"))
.via(toUpperCase)
.runWith(sink, system);
1.1.3