Class ByteStreams
- java.lang.Object
-
- com.google.common.io.ByteStreams
-
@Beta public final class ByteStreams extends java.lang.Object
Provides utility methods for working with byte arrays and I/O streams.- Since:
- 1.0
-
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static ByteSink
asByteSink(OutputSupplier<? extends java.io.OutputStream> supplier)
Deprecated.Convert allOutputSupplier<? extends OutputStream>
implementations to extendByteSink
or provide a method for viewing the object as aByteSink
.static ByteSource
asByteSource(InputSupplier<? extends java.io.InputStream> supplier)
Deprecated.Convert allInputSupplier<? extends InputStream>
implementations to extendByteSource
or provide a method for viewing the object as aByteSource
.static long
copy(InputSupplier<? extends java.io.InputStream> from, OutputSupplier<? extends java.io.OutputStream> to)
Deprecated.UseByteSource.copyTo(ByteSink)
instead.static long
copy(InputSupplier<? extends java.io.InputStream> from, java.io.OutputStream to)
Deprecated.UseByteSource.copyTo(OutputStream)
instead.static long
copy(java.io.InputStream from, OutputSupplier<? extends java.io.OutputStream> to)
Deprecated.UseByteSink.writeFrom(InputStream)
instead.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.static boolean
equal(InputSupplier<? extends java.io.InputStream> supplier1, InputSupplier<? extends java.io.InputStream> supplier2)
Deprecated.UseByteSource.contentEquals(ByteSource)
instead.static HashCode
hash(InputSupplier<? extends java.io.InputStream> supplier, HashFunction hashFunction)
Deprecated.UseByteSource.hash(HashFunction)
instead.static InputSupplier<java.io.InputStream>
join(InputSupplier<? extends java.io.InputStream>... suppliers)
Deprecated.UseByteSource.concat(ByteSource[])
instead.static InputSupplier<java.io.InputStream>
join(java.lang.Iterable<? extends InputSupplier<? extends java.io.InputStream>> suppliers)
Deprecated.UseByteSource.concat(Iterable)
instead.static long
length(InputSupplier<? extends java.io.InputStream> supplier)
Deprecated.UseByteSource.size()
instead.static java.io.InputStream
limit(java.io.InputStream in, long limit)
Wraps aInputStream
, limiting the number of bytes which can be read.static ByteArrayDataInput
newDataInput(byte[] bytes)
Returns a newByteArrayDataInput
instance to read from thebytes
array from the beginning.static ByteArrayDataInput
newDataInput(byte[] bytes, int start)
Returns a newByteArrayDataInput
instance to read from thebytes
array, starting at the given position.static ByteArrayDataInput
newDataInput(EaglerInputStream byteArrayInputStream)
Returns a newByteArrayDataInput
instance to read from the givenByteArrayInputStream
.static ByteArrayDataOutput
newDataOutput()
Returns a newByteArrayDataOutput
instance with a default size.static ByteArrayDataOutput
newDataOutput(int size)
Returns a newByteArrayDataOutput
instance sized to holdsize
bytes before resizing.static ByteArrayDataOutput
newDataOutput(java.io.ByteArrayOutputStream byteArrayOutputSteam)
Returns a newByteArrayDataOutput
instance which writes to the givenByteArrayOutputStream
.static InputSupplier<EaglerInputStream>
newInputStreamSupplier(byte[] b)
Deprecated.UseByteSource.wrap(byte[])
instead.static InputSupplier<EaglerInputStream>
newInputStreamSupplier(byte[] b, int off, int len)
Deprecated.UseByteSource.wrap(b).slice(off, len)
instead.static java.io.OutputStream
nullOutputStream()
Returns anOutputStream
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 arrayb
.static <T> T
readBytes(InputSupplier<? extends java.io.InputStream> supplier, ByteProcessor<T> processor)
Deprecated.UseByteSource.read(ByteProcessor)
instead.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 asDataInput.readFully(byte[])
.static void
readFully(java.io.InputStream in, byte[] b, int off, int len)
Attempts to readlen
bytes from the stream into the given array starting atoff
, with the same behavior asDataInput.readFully(byte[], int, int)
.static void
skipFully(java.io.InputStream in, long n)
Discardsn
bytes of data from the input stream.static InputSupplier<java.io.InputStream>
slice(InputSupplier<? extends java.io.InputStream> supplier, long offset, long length)
Deprecated.UseByteSource#slice(int, int)
instead.static byte[]
toByteArray(InputSupplier<? extends java.io.InputStream> supplier)
Deprecated.UseByteSource.read()
instead.static byte[]
toByteArray(java.io.InputStream in)
Reads all bytes from an input stream into a byte array.static void
write(byte[] from, OutputSupplier<? extends java.io.OutputStream> to)
Deprecated.UseByteSink.write(byte[])
instead.
-
-
-
Method Detail
-
newInputStreamSupplier
@Deprecated public static InputSupplier<EaglerInputStream> newInputStreamSupplier(byte[] b)
Deprecated.UseByteSource.wrap(byte[])
instead. This method is scheduled for removal in Guava 18.0.Returns a factory that will supply instances ofByteArrayInputStream
that read from the given byte array.- Parameters:
b
- the input buffer- Returns:
- the factory
-
newInputStreamSupplier
@Deprecated public static InputSupplier<EaglerInputStream> newInputStreamSupplier(byte[] b, int off, int len)
Deprecated.UseByteSource.wrap(b).slice(off, len)
instead. This method is scheduled for removal in Guava 18.0.Returns a factory that will supply instances ofByteArrayInputStream
that read from the given byte array.- Parameters:
b
- the input bufferoff
- the offset in the buffer of the first byte to readlen
- the maximum number of bytes to read from the buffer- Returns:
- the factory
-
write
@Deprecated public static void write(byte[] from, OutputSupplier<? extends java.io.OutputStream> to) throws java.io.IOException
Deprecated.UseByteSink.write(byte[])
instead. This method is scheduled for removal in Guava 18.0.Writes a byte array to an output stream from the given supplier.- Parameters:
from
- the bytes to writeto
- the output supplier- Throws:
java.io.IOException
- if an I/O error occurs
-
copy
@Deprecated public static long copy(InputSupplier<? extends java.io.InputStream> from, OutputSupplier<? extends java.io.OutputStream> to) throws java.io.IOException
Deprecated.UseByteSource.copyTo(ByteSink)
instead. This method is scheduled for removal in Guava 18.0.Opens input and output streams from the given suppliers, copies all bytes from the input to the output, and closes the streams.- Parameters:
from
- the input factoryto
- the output factory- Returns:
- the number of bytes copied
- Throws:
java.io.IOException
- if an I/O error occurs
-
copy
@Deprecated public static long copy(InputSupplier<? extends java.io.InputStream> from, java.io.OutputStream to) throws java.io.IOException
Deprecated.UseByteSource.copyTo(OutputStream)
instead. This method is scheduled for removal in Guava 18.0.Opens an input stream from the supplier, copies all bytes from the input to the output, and closes the input stream. Does not close or flush the output stream.- Parameters:
from
- the input factoryto
- the output stream to write to- Returns:
- the number of bytes copied
- Throws:
java.io.IOException
- if an I/O error occurs
-
copy
@Deprecated public static long copy(java.io.InputStream from, OutputSupplier<? extends java.io.OutputStream> to) throws java.io.IOException
Deprecated.UseByteSink.writeFrom(InputStream)
instead. This method is scheduled for removal in Guava 18.0.Opens an output stream from the supplier, copies all bytes from the input to the output, and closes the output stream. Does not close or flush the input stream.- Parameters:
from
- the input stream to read fromto
- the output factory- Returns:
- the number of bytes copied
- Throws:
java.io.IOException
- if an I/O error occurs- Since:
- 10.0
-
copy
public static long copy(java.io.InputStream from, java.io.OutputStream to) throws java.io.IOException
Copies all bytes from the input stream to the output stream. Does not close or flush either stream.- Parameters:
from
- the input stream to read fromto
- the output stream to write to- Returns:
- the number of bytes copied
- Throws:
java.io.IOException
- if an I/O error occurs
-
copy
public static long copy(java.nio.channels.ReadableByteChannel from, java.nio.channels.WritableByteChannel to) throws java.io.IOException
Copies all bytes from the readable channel to the writable channel. Does not close or flush either channel.- Parameters:
from
- the readable channel to read fromto
- the writable channel to write to- Returns:
- the number of bytes copied
- Throws:
java.io.IOException
- if an I/O error occurs
-
toByteArray
public static byte[] toByteArray(java.io.InputStream in) throws java.io.IOException
Reads all bytes from an input stream into a byte array. Does not close the stream.- Parameters:
in
- the input stream to read from- Returns:
- a byte array containing all the bytes from the stream
- Throws:
java.io.IOException
- if an I/O error occurs
-
toByteArray
@Deprecated public static byte[] toByteArray(InputSupplier<? extends java.io.InputStream> supplier) throws java.io.IOException
Deprecated.UseByteSource.read()
instead. This method is scheduled for removal in Guava 18.0.Returns the data from aInputStream
factory as a byte array.- Parameters:
supplier
- the factory- Throws:
java.io.IOException
- if an I/O error occurs
-
newDataInput
public static ByteArrayDataInput newDataInput(byte[] bytes)
Returns a newByteArrayDataInput
instance to read from thebytes
array from the beginning.
-
newDataInput
public static ByteArrayDataInput newDataInput(byte[] bytes, int start)
Returns a newByteArrayDataInput
instance to read from thebytes
array, starting at the given position.- Throws:
java.lang.IndexOutOfBoundsException
- ifstart
is negative or greater than the length of the array
-
newDataInput
public static ByteArrayDataInput newDataInput(EaglerInputStream byteArrayInputStream)
Returns a newByteArrayDataInput
instance to read from the givenByteArrayInputStream
. The given input stream is not reset before being read from by the returnedByteArrayDataInput
.- Since:
- 17.0
-
newDataOutput
public static ByteArrayDataOutput newDataOutput()
Returns a newByteArrayDataOutput
instance with a default size.
-
newDataOutput
public static ByteArrayDataOutput newDataOutput(int size)
Returns a newByteArrayDataOutput
instance sized to holdsize
bytes before resizing.- Throws:
java.lang.IllegalArgumentException
- ifsize
is negative
-
newDataOutput
public static ByteArrayDataOutput newDataOutput(java.io.ByteArrayOutputStream byteArrayOutputSteam)
Returns a newByteArrayDataOutput
instance which writes to the givenByteArrayOutputStream
. The given output stream is not reset before being written to by the returnedByteArrayDataOutput
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 forByteArrayDataOutput.toByteArray()
will not be honored (the bytes returned in the byte array may not be exactly what was written via calls toByteArrayDataOutput
).- Since:
- 17.0
-
nullOutputStream
public static java.io.OutputStream nullOutputStream()
Returns anOutputStream
that simply discards written bytes.- Since:
- 14.0 (since 1.0 as com.google.common.io.NullOutputStream)
-
limit
public static java.io.InputStream limit(java.io.InputStream in, long limit)
Wraps aInputStream
, limiting the number of bytes which can be read.- Parameters:
in
- the input stream to be wrappedlimit
- the maximum number of bytes to be read- Returns:
- a length-limited
InputStream
- Since:
- 14.0 (since 1.0 as com.google.common.io.LimitInputStream)
-
length
@Deprecated public static long length(InputSupplier<? extends java.io.InputStream> supplier) throws java.io.IOException
Deprecated.UseByteSource.size()
instead. This method is scheduled for removal in Guava 18.0.Returns the length of a supplied input stream, in bytes.- Throws:
java.io.IOException
-
equal
@Deprecated public static boolean equal(InputSupplier<? extends java.io.InputStream> supplier1, InputSupplier<? extends java.io.InputStream> supplier2) throws java.io.IOException
Deprecated.UseByteSource.contentEquals(ByteSource)
instead. This method is scheduled for removal in Guava 18.0.Returns true if the supplied input streams contain the same bytes.- Throws:
java.io.IOException
- if an I/O error occurs
-
readFully
public static void readFully(java.io.InputStream in, byte[] b) throws java.io.IOException
Attempts to read enough bytes from the stream to fill the given byte array, with the same behavior asDataInput.readFully(byte[])
. Does not close the stream.- Parameters:
in
- the input stream to read from.b
- the buffer into which the data is read.- Throws:
java.io.EOFException
- if this stream reaches the end before reading all the bytes.java.io.IOException
- if an I/O error occurs.
-
readFully
public static void readFully(java.io.InputStream in, byte[] b, int off, int len) throws java.io.IOException
Attempts to readlen
bytes from the stream into the given array starting atoff
, with the same behavior asDataInput.readFully(byte[], int, int)
. Does not close the stream.- Parameters:
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.- Throws:
java.io.EOFException
- if this stream reaches the end before reading all the bytes.java.io.IOException
- if an I/O error occurs.
-
skipFully
public static void skipFully(java.io.InputStream in, long n) throws java.io.IOException
Discardsn
bytes of data from the input stream. This method will block until the full amount has been skipped. Does not close the stream.- Parameters:
in
- the input stream to read fromn
- the number of bytes to skip- Throws:
java.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 skipping
-
readBytes
@Deprecated public static <T> T readBytes(InputSupplier<? extends java.io.InputStream> supplier, ByteProcessor<T> processor) throws java.io.IOException
Deprecated.UseByteSource.read(ByteProcessor)
instead. This method is scheduled for removal in Guava 18.0.Process the bytes of a supplied stream- Parameters:
supplier
- the input stream factoryprocessor
- the object to which to pass the bytes of the stream- Returns:
- the result of the byte processor
- Throws:
java.io.IOException
- if an I/O error occurs
-
readBytes
public static <T> T readBytes(java.io.InputStream input, ByteProcessor<T> processor) throws java.io.IOException
Process the bytes of the given input stream using the given processor.- Parameters:
input
- the input stream to processprocessor
- the object to which to pass the bytes of the stream- Returns:
- the result of the byte processor
- Throws:
java.io.IOException
- if an I/O error occurs- Since:
- 14.0
-
hash
@Deprecated public static HashCode hash(InputSupplier<? extends java.io.InputStream> supplier, HashFunction hashFunction) throws java.io.IOException
Deprecated.UseByteSource.hash(HashFunction)
instead. This method is scheduled for removal in Guava 18.0.Computes the hash code of the data supplied bysupplier
usinghashFunction
.- Parameters:
supplier
- the input stream factoryhashFunction
- the hash function to use to hash the data- Returns:
- the
HashCode
of all of the bytes in the input stream - Throws:
java.io.IOException
- if an I/O error occurs- Since:
- 12.0
-
read
public static int read(java.io.InputStream in, byte[] b, int off, int len) throws java.io.IOException
Reads some bytes from an input stream and stores them into the buffer arrayb
. This method blocks untillen
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, aNullPointerException
is thrown. Ifoff
is negative, orlen
is negative, oroff+len
is greater than the length of the arrayb
, then anIndexOutOfBoundsException
is thrown. Iflen
is zero, then no bytes are read. Otherwise, the first byte read is stored into elementb[off]
, the next one intob[off+1]
, and so on. The number of bytes read is, at most, equal tolen
.- Parameters:
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 read- Returns:
- the number of bytes read
- Throws:
java.io.IOException
- if an I/O error occurs
-
slice
@Deprecated public static InputSupplier<java.io.InputStream> slice(InputSupplier<? extends java.io.InputStream> supplier, long offset, long length)
Deprecated.UseByteSource#slice(int, int)
instead. This method is scheduled for removal in Guava 18.0.Returns anInputSupplier
that returns input streams from the an underlying supplier, where each stream starts at the given offset and is limited to the specified number of bytes.- Parameters:
supplier
- the supplier from which to get the raw streamsoffset
- the offset in bytes into the underlying stream where the returned streams will startlength
- the maximum length of the returned streams- Throws:
java.lang.IllegalArgumentException
- if offset or length are negative
-
join
@Deprecated public static InputSupplier<java.io.InputStream> join(java.lang.Iterable<? extends InputSupplier<? extends java.io.InputStream>> suppliers)
Deprecated.UseByteSource.concat(Iterable)
instead. This method is scheduled for removal in Guava 18.0.Joins multipleInputStream
suppliers into a single supplier. Streams returned from the supplier will contain the concatenated data from the streams of the underlying suppliers.Only one underlying input stream will be open at a time. Closing the joined stream will close the open underlying stream.
Reading from the joined stream will throw a
NullPointerException
if any of the suppliers are null or return null.- Parameters:
suppliers
- the suppliers to concatenate- Returns:
- a supplier that will return a stream containing the concatenated stream data
-
join
@Deprecated public static InputSupplier<java.io.InputStream> join(InputSupplier<? extends java.io.InputStream>... suppliers)
Deprecated.UseByteSource.concat(ByteSource[])
instead. This method is scheduled for removal in Guava 18.0.Varargs form ofjoin(Iterable)
.
-
asByteSource
@Deprecated public static ByteSource asByteSource(InputSupplier<? extends java.io.InputStream> supplier)
Deprecated.Convert allInputSupplier<? extends InputStream>
implementations to extendByteSource
or provide a method for viewing the object as aByteSource
. This method is scheduled for removal in Guava 18.0.Returns a view of the givenInputStream
supplier as aByteSource
.This method is a temporary method provided for easing migration from suppliers to sources and sinks.
- Since:
- 15.0
-
asByteSink
@Deprecated public static ByteSink asByteSink(OutputSupplier<? extends java.io.OutputStream> supplier)
Deprecated.Convert allOutputSupplier<? extends OutputStream>
implementations to extendByteSink
or provide a method for viewing the object as aByteSink
. This method is scheduled for removal in Guava 18.0.Returns a view of the givenOutputStream
supplier as aByteSink
.This method is a temporary method provided for easing migration from suppliers to sources and sinks.
- Since:
- 15.0
-
-