Package io.micronaut.http.body.stream
Class InputStreamByteBody
java.lang.Object
io.micronaut.http.body.stream.InputStreamByteBody
- All Implemented Interfaces:
ByteBody
,CloseableByteBody
,InternalByteBody
,Closeable
,AutoCloseable
public final class InputStreamByteBody
extends Object
implements CloseableByteBody, InternalByteBody
ByteBody
implementation that reads from an InputStream.- Since:
- 4.6.0
- Author:
- Jonas Konrad
-
Nested Class Summary
Nested classes/interfaces inherited from interface io.micronaut.http.body.ByteBody
ByteBody.BodyDiscardedException, ByteBody.SplitBackpressureMode
-
Method Summary
Modifier and TypeMethodDescriptionSignal that the upstream may discard any remaining body data.@NonNull ExecutionFlow<? extends CloseableAvailableByteBody>
Variant ofInternalByteBody.buffer()
that uses theExecutionFlow
API for extra efficiency.void
close()
Clean up any resources held by this instance.static @NonNull CloseableByteBody
create
(@NonNull InputStream stream, @NonNull OptionalLong length, @NonNull Executor ioExecutor, @NonNull ByteBufferFactory<?, ?> bufferFactory) Create a new stream-basedCloseableByteBody
.Get the expected length of this body, if known (either fromContent-Length
or from previous buffering).split
(ByteBody.SplitBackpressureMode backpressureMode) Create a new, independentByteBody
that contains the same data as this one.@NonNull reactor.core.publisher.Flux<byte[]>
Get this body as a reactive stream of byte arrays.Get this body as a reactive stream ofByteBuffer
s.@NonNull io.micronaut.http.body.stream.ExtendedInputStream
Get this body as anInputStream
.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface io.micronaut.http.body.InternalByteBody
buffer
-
Method Details
-
create
@NonNull public static @NonNull CloseableByteBody create(@NonNull @NonNull InputStream stream, @NonNull @NonNull OptionalLong length, @NonNull @NonNull Executor ioExecutor, @NonNull @NonNull ByteBufferFactory<?, ?> bufferFactory) Create a new stream-basedCloseableByteBody
. Ownership of the stream is transferred to the returned body.- Parameters:
stream
- The stream backing the bodylength
- The expected content length (seeexpectedLength()
)ioExecutor
- An executor where blockingInputStream.read()
may be performedbufferFactory
- AByteBufferFactory
for buffer-based methods- Returns:
- The body
-
allowDiscard
Description copied from interface:ByteBody
Signal that the upstream may discard any remaining body data. Only if all consumers of the body allow discarding will the body be discarded, otherwise it will still be sent to all consumers. It is an optional operation.Discarding may be implemented e.g. by closing the input side of an HTTP/2 stream.
This method must be called before any primary operation.
- Specified by:
allowDiscard
in interfaceByteBody
- Specified by:
allowDiscard
in interfaceCloseableByteBody
- Returns:
- This body
-
close
public void close()Description copied from interface:CloseableByteBody
Clean up any resources held by this instance. See class documentation.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceCloseableByteBody
-
split
Description copied from interface:ByteBody
Create a new, independentByteBody
that contains the same data as this one.- Specified by:
split
in interfaceByteBody
- Parameters:
backpressureMode
- How to handle backpressure between the old and new body. SeeByteBody.SplitBackpressureMode
documentation- Returns:
- The newly split body. Must be closed by the caller, unless a terminal operation is performed on it
-
expectedLength
Description copied from interface:ByteBody
Get the expected length of this body, if known (either fromContent-Length
or from previous buffering). The actual length will never exceed this value, though it may sometimes be lower if there is a connection error.This value may go from
OptionalLong.empty()
to a known value over the lifetime of this body.This is not a primary operation and does not modify this
ByteBody
.- Specified by:
expectedLength
in interfaceByteBody
- Returns:
- The expected length of this body
-
toInputStream
Description copied from interface:ByteBody
Get this body as anInputStream
.This is a primary operation. After this operation, no other primary operation or
ByteBody.split()
may be done.- Specified by:
toInputStream
in interfaceByteBody
- Returns:
- The streamed bytes
-
toByteArrayPublisher
Description copied from interface:ByteBody
Get this body as a reactive stream of byte arrays.This is a primary operation. After this operation, no other primary operation or
ByteBody.split()
may be done.- Specified by:
toByteArrayPublisher
in interfaceByteBody
- Returns:
- The streamed bytes
-
toByteBufferPublisher
Description copied from interface:ByteBody
Get this body as a reactive stream ofByteBuffer
s. Note that the buffers may bereference counted
, and the caller must take care of releasing them.This is a primary operation. After this operation, no other primary operation or
ByteBody.split()
may be done.- Specified by:
toByteBufferPublisher
in interfaceByteBody
- Returns:
- The streamed bytes
-
bufferFlow
Description copied from interface:InternalByteBody
Variant ofInternalByteBody.buffer()
that uses theExecutionFlow
API for extra efficiency.- Specified by:
bufferFlow
in interfaceInternalByteBody
- Returns:
- A flow that completes when all bytes are available
-