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
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
Sink
that reads the contents from the source, converts it into uppercase and materializes into a java.io.InputStream
- Scala
-
source
val 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)
- Java
-
source
Charset 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);