public class MultipartByteSource extends Object implements ByteSource
| Constructor and Description |
|---|
MultipartByteSource(Stream<? extends MultipartPart> parts)
Create a multipart body from the parts.
|
MultipartByteSource(Stream<? extends MultipartPart> parts,
CharSequence boundary)
Create a multipart body from the parts, using the "boundary".
|
| Instance Methods | |
|---|---|
CharSequence |
getBoundary()
Get the "boundary" of this multipart body.
|
Async<ByteBuffer> |
read()
Read the next chunk of bytes.
|
long |
skip(long n)
Try to skip forward `n` bytes; return number of bytes actually skipped.
|
Async<Void> |
close()
Close this source.
|
| Static Method | |
CharSequence |
createRandomBoundary(int length)
Create a random "boundary" of the specified length for a multipart body.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitasString, asString, readAll, toSinkpublic MultipartByteSource(Stream<? extends MultipartPart> parts)
A random "boundary" is generated for this multipart body.
public MultipartByteSource(Stream<? extends MultipartPart> parts, CharSequence boundary)
public CharSequence getBoundary()
public Async<ByteBuffer> read() throws IllegalStateException
ByteSourceThe method returns an `Async<ByteBuffer>` which eventually completes in 3 possible ways:
End, indicating EOF.
Example Usage:
AsyncIterator.forEach( source::read, System.out::println )
.finally_( source::close );
The resulting ByteBuffer may contain any number of bytes. For example, it may be a view of
a huge ByteBuffer that's cached and shared.
You may use PushbackByteSource to "unread".
The ownership of the ByteBuffer is transferred to the caller. The content of the ByteBuffer should be treated as read-only.
CAUTION: since ByteBuffer is stateful (even for methods like ByteBuffer.get()),
a new ByteBuffer must be created for each read() action.
The implementation may create a view of a shared ByteBuffer through
ByteBuffer.asReadOnlyBuffer().
The app should wait for this read() action to complete before it calls another method on this source.
read in interface ByteSourceIllegalStateExceptionpublic long skip(long n)
throws IllegalArgumentException,
IllegalStateException
ByteSourceThis is an optional operation. An implementation can simply do nothing and return 0. The default implementation does exactly that.
The returned value must no exceed `n`.
It's possible to skip beyond EOF. For example, if there are 10 bytes left in this source, skip(20) may succeed and return 15. The next read() will see EOF.
The implementation must be non-blocking.
This method should not be invoked while a read() is pending, or after close() has been called. IllegalStateException may be thrown if that happens.
skip in interface ByteSourcen - number of bytes to skip; n >= 0.0 <= m <= n.IllegalArgumentException - if n < 0.IllegalStateExceptionpublic Async<Void> close()
ByteSourceThis method can be called multiple times; only the first call is effective.
This method should not be invoked while a read() is pending;
if that's needed, see ThreadSafeByteSource for a solution.
Since ByteSource is a read-only concept, close() should not have any
side effects that the caller cares about.
The caller is allowed to ignore the returned Async<Void>
(as if the method returns void).
The close() action should not fail; if some internal exception arises, it can be logged.
Most implementations return an immediate Async.VOID,
even if there are still background cleanup tasks running.
close in interface ByteSourcepublic static CharSequence createRandomBoundary(int length)