@Beta @GwtIncompatible public final class ByteStreams extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
private static class |
ByteStreams.ByteArrayDataInputStream |
private static class |
ByteStreams.ByteArrayDataOutputStream |
private static class |
ByteStreams.LimitedInputStream |
Modifier and Type | Field and Description |
---|---|
private static int |
BUFFER_SIZE |
private static int |
MAX_ARRAY_LEN
Max array length on JVM.
|
private static java.io.OutputStream |
NULL_OUTPUT_STREAM |
private static int |
TO_BYTE_ARRAY_DEQUE_SIZE
Large enough to never need to expand, given the geometric progression of buffer sizes.
|
private static int |
ZERO_COPY_CHUNK_SIZE
There are three methods to implement
FileChannel.transferTo(long, long,
WritableByteChannel) :
Use sendfile(2) or equivalent. |
Modifier | Constructor and Description |
---|---|
private |
ByteStreams() |
Modifier and Type | Method and Description |
---|---|
private static byte[] |
combineBuffers(java.util.Deque<byte[]> bufs,
int totalLen) |
static long |
copy(java.io.InputStream from,
java.io.OutputStream to)
Copies all bytes from the input stream to the output stream.
|
static long |
copy(java.nio.channels.ReadableByteChannel from,
java.nio.channels.WritableByteChannel to)
Copies all bytes from the readable channel to the writable channel.
|
(package private) static byte[] |
createBuffer()
Creates a new byte array for buffering reads or writes.
|
static long |
exhaust(java.io.InputStream in)
Reads and discards data from the given
InputStream until the end of the stream is
reached. |
static java.io.InputStream |
limit(java.io.InputStream in,
long limit)
Wraps a
InputStream , limiting the number of bytes which can be read. |
static ByteArrayDataInput |
newDataInput(byte[] bytes)
Returns a new
ByteArrayDataInput instance to read from the bytes array from the
beginning. |
static ByteArrayDataInput |
newDataInput(byte[] bytes,
int start)
Returns a new
ByteArrayDataInput instance to read from the bytes array,
starting at the given position. |
static ByteArrayDataInput |
newDataInput(java.io.ByteArrayInputStream byteArrayInputStream)
Returns a new
ByteArrayDataInput instance to read from the given ByteArrayInputStream . |
static ByteArrayDataOutput |
newDataOutput()
Returns a new
ByteArrayDataOutput instance with a default size. |
static ByteArrayDataOutput |
newDataOutput(java.io.ByteArrayOutputStream byteArrayOutputSteam)
Returns a new
ByteArrayDataOutput instance which writes to the given ByteArrayOutputStream . |
static ByteArrayDataOutput |
newDataOutput(int size)
Returns a new
ByteArrayDataOutput instance sized to hold size bytes before
resizing. |
static java.io.OutputStream |
nullOutputStream()
Returns an
OutputStream that simply discards written bytes. |
static int |
read(java.io.InputStream in,
byte[] b,
int off,
int len)
Reads some bytes from an input stream and stores them into the buffer array
b . |
static <T> T |
readBytes(java.io.InputStream input,
ByteProcessor<T> processor)
Process the bytes of the given input stream using the given processor.
|
static void |
readFully(java.io.InputStream in,
byte[] b)
Attempts to read enough bytes from the stream to fill the given byte array, with the same
behavior as
DataInput.readFully(byte[]) . |
static void |
readFully(java.io.InputStream in,
byte[] b,
int off,
int len)
Attempts to read
len bytes from the stream into the given array starting at off , with the same behavior as DataInput.readFully(byte[], int, int) . |
static void |
skipFully(java.io.InputStream in,
long n)
Discards
n bytes of data from the input stream. |
private static long |
skipSafely(java.io.InputStream in,
long n)
Attempts to skip up to
n bytes from the given input stream, but not more than in.available() bytes. |
(package private) static long |
skipUpTo(java.io.InputStream in,
long n)
Discards up to
n bytes of data from the input stream. |
static byte[] |
toByteArray(java.io.InputStream in)
Reads all bytes from an input stream into a byte array.
|
(package private) static byte[] |
toByteArray(java.io.InputStream in,
long expectedSize)
Reads all bytes from an input stream into a byte array.
|
private static byte[] |
toByteArrayInternal(java.io.InputStream in,
java.util.Deque<byte[]> bufs,
int totalLen)
Returns a byte array containing the bytes from the buffers already in
bufs (which have
a total combined length of totalLen bytes) followed by all bytes remaining in the given
input stream. |
private static final int BUFFER_SIZE
private static final int ZERO_COPY_CHUNK_SIZE
FileChannel.transferTo(long, long,
WritableByteChannel)
:
private static final int MAX_ARRAY_LEN
private static final int TO_BYTE_ARRAY_DEQUE_SIZE
private static final java.io.OutputStream NULL_OUTPUT_STREAM
static byte[] createBuffer()
public static long copy(java.io.InputStream from, java.io.OutputStream to) throws java.io.IOException
from
- the input stream to read fromto
- the output stream to write tojava.io.IOException
- if an I/O error occurspublic static long copy(java.nio.channels.ReadableByteChannel from, java.nio.channels.WritableByteChannel to) throws java.io.IOException
from
- the readable channel to read fromto
- the writable channel to write tojava.io.IOException
- if an I/O error occursprivate static byte[] toByteArrayInternal(java.io.InputStream in, java.util.Deque<byte[]> bufs, int totalLen) throws java.io.IOException
bufs
(which have
a total combined length of totalLen
bytes) followed by all bytes remaining in the given
input stream.java.io.IOException
private static byte[] combineBuffers(java.util.Deque<byte[]> bufs, int totalLen)
public static byte[] toByteArray(java.io.InputStream in) throws java.io.IOException
in
- the input stream to read fromjava.io.IOException
- if an I/O error occursstatic byte[] toByteArray(java.io.InputStream in, long expectedSize) throws java.io.IOException
java.io.IOException
public static long exhaust(java.io.InputStream in) throws java.io.IOException
InputStream
until the end of the stream is
reached. Returns the total number of bytes read. Does not close the stream.java.io.IOException
public static ByteArrayDataInput newDataInput(byte[] bytes)
ByteArrayDataInput
instance to read from the bytes
array from the
beginning.public static ByteArrayDataInput newDataInput(byte[] bytes, int start)
ByteArrayDataInput
instance to read from the bytes
array,
starting at the given position.java.lang.IndexOutOfBoundsException
- if start
is negative or greater than the length of
the arraypublic static ByteArrayDataInput newDataInput(java.io.ByteArrayInputStream byteArrayInputStream)
ByteArrayDataInput
instance to read from the given ByteArrayInputStream
. The given input stream is not reset before being read from by the
returned ByteArrayDataInput
.public static ByteArrayDataOutput newDataOutput()
ByteArrayDataOutput
instance with a default size.public static ByteArrayDataOutput newDataOutput(int size)
ByteArrayDataOutput
instance sized to hold size
bytes before
resizing.java.lang.IllegalArgumentException
- if size
is negativepublic static ByteArrayDataOutput newDataOutput(java.io.ByteArrayOutputStream byteArrayOutputSteam)
ByteArrayDataOutput
instance which writes to the given ByteArrayOutputStream
. The given output stream is not reset before being written to by the
returned ByteArrayDataOutput
and new data will be appended to any existing content.
Note that if the given output stream was not empty or is modified after the ByteArrayDataOutput
is created, the contract for ByteArrayDataOutput.toByteArray()
will
not be honored (the bytes returned in the byte array may not be exactly what was written via
calls to ByteArrayDataOutput
).
public static java.io.OutputStream nullOutputStream()
OutputStream
that simply discards written bytes.public static java.io.InputStream limit(java.io.InputStream in, long limit)
InputStream
, limiting the number of bytes which can be read.in
- the input stream to be wrappedlimit
- the maximum number of bytes to be readInputStream
public static void readFully(java.io.InputStream in, byte[] b) throws java.io.IOException
DataInput.readFully(byte[])
. Does not close the stream.in
- the input stream to read from.b
- the buffer into which the data is read.java.io.EOFException
- if this stream reaches the end before reading all the bytes.java.io.IOException
- if an I/O error occurs.public static void readFully(java.io.InputStream in, byte[] b, int off, int len) throws java.io.IOException
len
bytes from the stream into the given array starting at off
, with the same behavior as DataInput.readFully(byte[], int, int)
. Does not close
the stream.in
- the input stream to read from.b
- the buffer into which the data is read.off
- an int specifying the offset into the data.len
- an int specifying the number of bytes to read.java.io.EOFException
- if this stream reaches the end before reading all the bytes.java.io.IOException
- if an I/O error occurs.public static void skipFully(java.io.InputStream in, long n) throws java.io.IOException
n
bytes of data from the input stream. This method will block until the full
amount has been skipped. Does not close the stream.in
- the input stream to read fromn
- the number of bytes to skipjava.io.EOFException
- if this stream reaches the end before skipping all the bytesjava.io.IOException
- if an I/O error occurs, or the stream does not support skippingstatic long skipUpTo(java.io.InputStream in, long n) throws java.io.IOException
n
bytes of data from the input stream. This method will block until
either the full amount has been skipped or until the end of the stream is reached, whichever
happens first. Returns the total number of bytes skipped.java.io.IOException
private static long skipSafely(java.io.InputStream in, long n) throws java.io.IOException
n
bytes from the given input stream, but not more than in.available()
bytes. This prevents FileInputStream
from skipping more bytes than
actually remain in the file, something that it specifies it can do in its Javadoc despite the fact that it is violating the contract of
InputStream.skip()
.java.io.IOException
public static <T> T readBytes(java.io.InputStream input, ByteProcessor<T> processor) throws java.io.IOException
input
- the input stream to processprocessor
- the object to which to pass the bytes of the streamjava.io.IOException
- if an I/O error occurspublic static int read(java.io.InputStream in, byte[] b, int off, int len) throws java.io.IOException
b
. This
method blocks until len
bytes of input data have been read into the array, or end of
file is detected. The number of bytes read is returned, possibly zero. Does not close the
stream.
A caller can detect EOF if the number of bytes read is less than len
. All subsequent
calls on the same stream will return zero.
If b
is null, a NullPointerException
is thrown. If off
is negative,
or len
is negative, or off+len
is greater than the length of the array b
, then an IndexOutOfBoundsException
is thrown. If len
is zero, then no bytes
are read. Otherwise, the first byte read is stored into element b[off]
, the next one
into b[off+1]
, and so on. The number of bytes read is, at most, equal to len
.
in
- the input stream to read fromb
- the buffer into which the data is readoff
- an int specifying the offset into the datalen
- an int specifying the number of bytes to readjava.io.IOException
- if an I/O error occurs