Class 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)
      Returns a view of the given OutputStream supplier as a ByteSink.
      static ByteSource asByteSource​(byte[] b)
      Deprecated.
      static ByteSource asByteSource​(InputSupplier<? extends java.io.InputStream> supplier)
      Returns a view of the given InputStream supplier as a ByteSource.
      static long copy​(InputSupplier<? extends java.io.InputStream> from, OutputSupplier<? extends java.io.OutputStream> to)
      Opens input and output streams from the given suppliers, copies all bytes from the input to the output, and closes the streams.
      static long copy​(InputSupplier<? extends java.io.InputStream> from, java.io.OutputStream to)
      Opens an input stream from the supplier, copies all bytes from the input to the output, and closes the input stream.
      static long copy​(java.io.InputStream from, OutputSupplier<? extends java.io.OutputStream> to)
      Opens an output stream from the supplier, copies all bytes from the input to the output, and closes the output stream.
      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)
      Returns true if the supplied input streams contain the same bytes.
      static HashCode hash​(InputSupplier<? extends java.io.InputStream> supplier, HashFunction hashFunction)
      Computes the hash code of the data supplied by supplier using hashFunction.
      static InputSupplier<java.io.InputStream> join​(InputSupplier<? extends java.io.InputStream>... suppliers)
      Varargs form of join(Iterable).
      static InputSupplier<java.io.InputStream> join​(java.lang.Iterable<? extends InputSupplier<? extends java.io.InputStream>> suppliers)
      Joins multiple InputStream suppliers into a single supplier.
      static long length​(InputSupplier<? extends java.io.InputStream> supplier)
      Returns the length of a supplied input stream, in bytes.
      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 ByteArrayDataOutput newDataOutput()
      Returns a new ByteArrayDataOutput instance with a default size.
      static ByteArrayDataOutput newDataOutput​(int size)
      Returns a new ByteArrayDataOutput instance sized to hold size bytes before resizing.
      static InputSupplier<java.io.ByteArrayInputStream> newInputStreamSupplier​(byte[] b)
      Returns a factory that will supply instances of ByteArrayInputStream that read from the given byte array.
      static InputSupplier<java.io.ByteArrayInputStream> newInputStreamSupplier​(byte[] b, int off, int len)
      Returns a factory that will supply instances of ByteArrayInputStream that read from the given byte array.
      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​(InputSupplier<? extends java.io.InputStream> supplier, ByteProcessor<T> processor)
      Process the bytes of a supplied stream
      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.
      static InputSupplier<java.io.InputStream> slice​(InputSupplier<? extends java.io.InputStream> supplier, long offset, long length)
      Returns an InputSupplier 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.
      static byte[] toByteArray​(InputSupplier<? extends java.io.InputStream> supplier)
      Returns the data from a InputStream factory as a byte array.
      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)
      Writes a byte array to an output stream from the given supplier.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • newInputStreamSupplier

        public static InputSupplier<java.io.ByteArrayInputStream> newInputStreamSupplier​(byte[] b)
        Returns a factory that will supply instances of ByteArrayInputStream that read from the given byte array.
        Parameters:
        b - the input buffer
        Returns:
        the factory
      • newInputStreamSupplier

        public static InputSupplier<java.io.ByteArrayInputStream> newInputStreamSupplier​(byte[] b,
                                                                                         int off,
                                                                                         int len)
        Returns a factory that will supply instances of ByteArrayInputStream that read from the given byte array.
        Parameters:
        b - the input buffer
        off - the offset in the buffer of the first byte to read
        len - the maximum number of bytes to read from the buffer
        Returns:
        the factory
      • asByteSource

        @Deprecated
        public static ByteSource asByteSource​(byte[] b)
        Deprecated.
        Use ByteSource.wrap(byte[]) instead. This method is scheduled to be removed in Guava 16.0.
        Returns a new ByteSource that reads bytes from the given byte array.
        Since:
        14.0
      • write

        public static void write​(byte[] from,
                                 OutputSupplier<? extends java.io.OutputStream> to)
                          throws java.io.IOException
        Writes a byte array to an output stream from the given supplier.
        Parameters:
        from - the bytes to write
        to - the output supplier
        Throws:
        java.io.IOException - if an I/O error occurs
      • copy

        public static long copy​(InputSupplier<? extends java.io.InputStream> from,
                                OutputSupplier<? extends java.io.OutputStream> to)
                         throws java.io.IOException
        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 factory
        to - the output factory
        Returns:
        the number of bytes copied
        Throws:
        java.io.IOException - if an I/O error occurs
      • copy

        public static long copy​(InputSupplier<? extends java.io.InputStream> from,
                                java.io.OutputStream to)
                         throws java.io.IOException
        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 factory
        to - 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.io.InputStream from,
                                OutputSupplier<? extends java.io.OutputStream> to)
                         throws java.io.IOException
        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 from
        to - 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 from
        to - 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 from
        to - 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

        public static byte[] toByteArray​(InputSupplier<? extends java.io.InputStream> supplier)
                                  throws java.io.IOException
        Returns the data from a InputStream 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,
                                                      int start)
        Returns a new ByteArrayDataInput instance to read from the bytes array, starting at the given position.
        Throws:
        java.lang.IndexOutOfBoundsException - if start is negative or greater than the length of the array
      • newDataOutput

        public static ByteArrayDataOutput newDataOutput​(int size)
        Returns a new ByteArrayDataOutput instance sized to hold size bytes before resizing.
        Throws:
        java.lang.IllegalArgumentException - if size is negative
      • nullOutputStream

        public static java.io.OutputStream nullOutputStream()
        Returns an OutputStream 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 a InputStream, limiting the number of bytes which can be read.
        Parameters:
        in - the input stream to be wrapped
        limit - 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

        public static long length​(InputSupplier<? extends java.io.InputStream> supplier)
                           throws java.io.IOException
        Returns the length of a supplied input stream, in bytes.
        Throws:
        java.io.IOException
      • equal

        public static boolean equal​(InputSupplier<? extends java.io.InputStream> supplier1,
                                    InputSupplier<? extends java.io.InputStream> supplier2)
                             throws java.io.IOException
        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 as DataInput.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 read 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.
        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
        Discards n 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 from
        n - the number of bytes to skip
        Throws:
        java.io.EOFException - if this stream reaches the end before skipping all the bytes
        java.io.IOException - if an I/O error occurs, or the stream does not support skipping
      • readBytes

        public static <T> T readBytes​(InputSupplier<? extends java.io.InputStream> supplier,
                                      ByteProcessor<T> processor)
                               throws java.io.IOException
        Process the bytes of a supplied stream
        Parameters:
        supplier - the input stream factory
        processor - 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 process
        processor - 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

        public static HashCode hash​(InputSupplier<? extends java.io.InputStream> supplier,
                                    HashFunction hashFunction)
                             throws java.io.IOException
        Computes the hash code of the data supplied by supplier using hashFunction.
        Parameters:
        supplier - the input stream factory
        hashFunction - 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 array 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.

        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
        Returns:
        the number of bytes read
        Throws:
        java.io.IOException - if an I/O error occurs
      • slice

        public static InputSupplier<java.io.InputStream> slice​(InputSupplier<? extends java.io.InputStream> supplier,
                                                               long offset,
                                                               long length)
        Returns an InputSupplier 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 streams
        offset - the offset in bytes into the underlying stream where the returned streams will start
        length - the maximum length of the returned streams
        Throws:
        java.lang.IllegalArgumentException - if offset or length are negative
      • join

        public static InputSupplier<java.io.InputStream> join​(java.lang.Iterable<? extends InputSupplier<? extends java.io.InputStream>> suppliers)
        Joins multiple InputStream 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
      • asByteSource

        public static ByteSource asByteSource​(InputSupplier<? extends java.io.InputStream> supplier)
        Returns a view of the given InputStream supplier as a ByteSource.

        This method is a temporary method provided for easing migration from suppliers to sources and sinks.

        Since:
        15.0
      • asByteSink

        public static ByteSink asByteSink​(OutputSupplier<? extends java.io.OutputStream> supplier)
        Returns a view of the given OutputStream supplier as a ByteSink.

        This method is a temporary method provided for easing migration from suppliers to sources and sinks.

        Since:
        15.0