Class IOUtils


  • public final class IOUtils
    extends java.lang.Object
    This class contains various I/O-related methods.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private IOUtils()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.io.IOException closeAndLogException​(java.io.Closeable closeable, org.apache.commons.logging.Log logger, java.lang.String resourceName, java.io.IOException initialException)
      Try to close an IO resource and log and return if there was an exception.
      static void closeQuietly​(java.io.Closeable closeable)
      Null safe close of the given Closeable suppressing any exception.
      static long copy​(java.io.InputStream input, java.io.OutputStream output)
      Copies all the contents from the given input stream to the given output stream.
      static RandomAccessStreamCache.StreamCacheCreateFunction createMemoryOnlyStreamCache()
      Provides a function to create an instance of a memory only StreamCache using unrestricted main memory.
      static RandomAccessStreamCache.StreamCacheCreateFunction createTempFileOnlyStreamCache()
      Provides a function to create an instance of a temp file only StreamCache using unrestricted size.
      private static java.util.function.Consumer<java.nio.ByteBuffer> newBufferCleaner​(java.lang.Class<?> unmappableBufferClass, java.lang.invoke.MethodHandle unmapper)  
      static long populateBuffer​(java.io.InputStream in, byte[] buffer)
      Populates the given buffer with data read from the input stream.
      static byte[] toByteArray​(java.io.InputStream in)
      Reads the input stream and returns its contents as a byte array.
      static void unmap​(java.nio.ByteBuffer buf)
      Unmap memory mapped byte buffers.
      private static java.util.function.Consumer<java.nio.ByteBuffer> unmapper()
      This is adapted from org.apache.lucene.store.MMapDirectory
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • LOG

        private static final org.apache.commons.logging.Log LOG
        Log instance.
      • UNMAPPER

        private static final java.util.Optional<java.util.function.Consumer<java.nio.ByteBuffer>> UNMAPPER
    • Constructor Detail

      • IOUtils

        private IOUtils()
    • Method Detail

      • toByteArray

        public static byte[] toByteArray​(java.io.InputStream in)
                                  throws java.io.IOException
        Reads the input stream and returns its contents as a byte array.
        Parameters:
        in - the input stream to read from.
        Returns:
        the byte array
        Throws:
        java.io.IOException - if an I/O error occurs
      • copy

        public static long copy​(java.io.InputStream input,
                                java.io.OutputStream output)
                         throws java.io.IOException
        Copies all the contents from the given input stream to the given output stream.
        Parameters:
        input - the input stream
        output - the output stream
        Returns:
        the number of bytes that have been copied
        Throws:
        java.io.IOException - if an I/O error occurs
      • populateBuffer

        public static long populateBuffer​(java.io.InputStream in,
                                          byte[] buffer)
                                   throws java.io.IOException
        Populates the given buffer with data read from the input stream. If the data doesn't fit the buffer, only the data that fits in the buffer is read. If the data is less than fits in the buffer, the buffer is not completely filled.
        Parameters:
        in - the input stream to read from
        buffer - the buffer to fill
        Returns:
        the number of bytes written to the buffer
        Throws:
        java.io.IOException - if an I/O error occurs
      • closeQuietly

        public static void closeQuietly​(java.io.Closeable closeable)
        Null safe close of the given Closeable suppressing any exception.
        Parameters:
        closeable - to be closed
      • closeAndLogException

        public static java.io.IOException closeAndLogException​(java.io.Closeable closeable,
                                                               org.apache.commons.logging.Log logger,
                                                               java.lang.String resourceName,
                                                               java.io.IOException initialException)
        Try to close an IO resource and log and return if there was an exception.

        An exception is only returned if the IOException passed in is null.

        Parameters:
        closeable - to be closed
        logger - the logger to be used so that logging appears under that log instance
        resourceName - the name to appear in the log output
        initialException - if set, this exception will be returned even where there is another exception while closing the IO resource
        Returns:
        the IOException is there was any but only if initialException is null
      • unmap

        public static void unmap​(java.nio.ByteBuffer buf)
        Unmap memory mapped byte buffers. This is a hack waiting for a proper JVM provided solution expected in java 10 https://bugs.openjdk.java.net/browse/JDK-4724038 The issue here is that even when closed, memory mapped byte buffers hold a lock on the underlying file until GC is executes and this in turns result in an error if the user tries to move or delete the file.
        Parameters:
        buf - the buffer to be unmapped
      • unmapper

        private static java.util.function.Consumer<java.nio.ByteBuffer> unmapper()
        This is adapted from org.apache.lucene.store.MMapDirectory
        Returns:
      • newBufferCleaner

        private static java.util.function.Consumer<java.nio.ByteBuffer> newBufferCleaner​(java.lang.Class<?> unmappableBufferClass,
                                                                                         java.lang.invoke.MethodHandle unmapper)
      • createMemoryOnlyStreamCache

        public static RandomAccessStreamCache.StreamCacheCreateFunction createMemoryOnlyStreamCache()
        Provides a function to create an instance of a memory only StreamCache using unrestricted main memory. RandomAccessReadWriteBuffer is used as current default implementation.
        Returns:
        a function to create an instance of a memory only StreamCache using unrestricted main memory
      • createTempFileOnlyStreamCache

        public static RandomAccessStreamCache.StreamCacheCreateFunction createTempFileOnlyStreamCache()
        Provides a function to create an instance of a temp file only StreamCache using unrestricted size. ScratchFile is used as current default implementation.
        Returns:
        a function to create an instance of a temp file only StreamCache using unrestricted size