@Internal public final class IOUtils extends java.lang.Object
Modifier and Type | Method and Description |
---|---|
static long |
calculateChecksum(byte[] data)
Calculate checksum on input data
|
static long |
calculateChecksum(java.io.InputStream stream)
Calculate checksum on all the data read from input stream.
|
static void |
closeQuietly(java.io.Closeable closeable)
Quietly (no exceptions) close Closable resource.
|
static long |
copy(java.io.InputStream srcStream,
java.io.File destFile)
Copy the contents of the stream to a new file.
|
static long |
copy(java.io.InputStream inp,
java.io.OutputStream out)
Copies all the data from the given InputStream to the OutputStream.
|
static long |
copy(java.io.InputStream inp,
java.io.OutputStream out,
long limit)
Copies all the data from the given InputStream to the OutputStream.
|
static int |
getMaxByteArrayInitSize() |
static byte[] |
peekFirst8Bytes(java.io.InputStream stream)
Peeks at the first 8 bytes of the stream.
|
static byte[] |
peekFirstNBytes(java.io.InputStream stream,
int limit)
Peeks at the first N bytes of the stream.
|
static int |
readByte(java.io.InputStream is)
Simple utility function to check that you haven't hit EOF
when reading a byte.
|
static int |
readFully(java.io.InputStream in,
byte[] b)
Helper method, just calls
readFully(in, b, 0, b.length) |
static int |
readFully(java.io.InputStream in,
byte[] b,
int off,
int len)
Same as the normal
InputStream.read(byte[], int, int) , but tries to ensure
that the entire len number of bytes is read. |
static int |
readFully(java.nio.channels.ReadableByteChannel channel,
java.nio.ByteBuffer b)
Same as the normal
channel.read(b) , but tries to ensure
that the buffer is filled completely if possible, i.e. |
static byte[] |
safelyAllocate(long length,
int maxLength) |
static void |
safelyAllocateCheck(long length,
int maxLength) |
static byte[] |
safelyClone(byte[] src,
int offset,
int length,
int maxLength) |
static void |
setByteArrayMaxOverride(int maxOverride)
If this value is set to > 0,
safelyAllocate(long, int) will ignore the
maximum record length parameter. |
static void |
setMaxByteArrayInitSize(int maxOverride) |
static long |
skipFully(java.io.InputStream input,
long toSkip)
Skips bytes from an input byte stream.
|
static byte[] |
toByteArray(java.nio.ByteBuffer buffer,
int length)
Returns an array (that shouldn't be written to!) of the
ByteBuffer.
|
static byte[] |
toByteArray(java.io.InputStream stream)
Reads all the data from the input stream, and returns the bytes read.
|
static byte[] |
toByteArray(java.io.InputStream stream,
int length)
Reads up to
length bytes from the input stream, and returns the bytes read. |
static byte[] |
toByteArray(java.io.InputStream stream,
int length,
int maxLength)
Reads up to
length bytes from the input stream, and returns the bytes read. |
static byte[] |
toByteArrayWithMaxLength(java.io.InputStream stream,
int maxLength)
Reads the input stream, and returns the bytes read.
|
public static void setMaxByteArrayInitSize(int maxOverride)
maxOverride
- the max init size of ByteArrayOutputStream.
-1 (the default) means init size of ByteArrayOutputStream could be up to Integer.MAX_VALUE
public static int getMaxByteArrayInitSize()
Integer.MAX_VALUE
public static void setByteArrayMaxOverride(int maxOverride)
safelyAllocate(long, int)
will ignore the
maximum record length parameter.
This is designed to allow users to bypass the hard-coded maximum record lengths
if they are willing to accept the risk of allocating memory up to the size specified.
It also allows to impose a lower limit than used for very memory constrained systems.
Note: This is a per-allocation limit and does not allow you to limit the overall sum of allocations!
Use -1 for using the limits specified per record-type.maxOverride
- The maximum number of bytes that should be possible to be allocated in one step.public static byte[] peekFirst8Bytes(java.io.InputStream stream) throws java.io.IOException, EmptyFileException
EmptyFileException
- if the stream is emptyjava.io.IOException
public static byte[] peekFirstNBytes(java.io.InputStream stream, int limit) throws java.io.IOException, EmptyFileException
EmptyFileException
- if the stream is emptyjava.io.IOException
public static byte[] toByteArray(java.io.InputStream stream) throws java.io.IOException
stream
- The byte stream of data to read.java.io.IOException
- If reading data fails or EOF is encountered too early for the given length.RecordFormatException
- If the requested length is invalid.public static byte[] toByteArray(java.io.InputStream stream, int length) throws java.io.IOException
length
bytes from the input stream, and returns the bytes read.stream
- The byte stream of data to read.length
- The maximum length to read, use Integer.MAX_VALUE
to read the stream
until EOF.java.io.IOException
- If reading data fails or EOF is encountered too early for the given length.RecordFormatException
- If the requested length is invalid.public static byte[] toByteArray(java.io.InputStream stream, int length, int maxLength) throws java.io.IOException
length
bytes from the input stream, and returns the bytes read.stream
- The byte stream of data to read.length
- The maximum length to read, use Integer.MAX_VALUE
to read the stream
until EOFmaxLength
- if the input is equal to/longer than maxLength
bytes,
then throw an IOException
complaining about the length.
use Integer.MAX_VALUE
to disable the check - if setByteArrayMaxOverride(int)
is
set then that max of that value and this maxLength is usedjava.io.IOException
- If reading data fails or EOF is encountered too early for the given length.RecordFormatException
- If the requested length is invalid.public static byte[] toByteArrayWithMaxLength(java.io.InputStream stream, int maxLength) throws java.io.IOException
stream
- The byte stream of data to read.maxLength
- if the input is equal to/longer than maxLength
bytes,
then throw an IOException
complaining about the length.
use Integer.MAX_VALUE
to disable the check - if setByteArrayMaxOverride(int)
is
set then that max of that value and this maxLength is usedjava.io.IOException
- If reading data fails or EOF is encountered too early for the given length.RecordFormatException
- If the requested length is invalid.public static byte[] toByteArray(java.nio.ByteBuffer buffer, int length)
public static int readFully(java.io.InputStream in, byte[] b) throws java.io.IOException
readFully(in, b, 0, b.length)
in
- the stream from which the data is read.b
- the buffer into which the data is read.java.io.IOException
- if reading from the stream failspublic static int readFully(java.io.InputStream in, byte[] b, int off, int len) throws java.io.IOException
Same as the normal InputStream.read(byte[], int, int)
, but tries to ensure
that the entire len number of bytes is read.
If the end of file is reached before any bytes are read, returns -1
. If
the end of the file is reached after some bytes are read, returns the
number of bytes read. If the end of the file isn't reached before len
bytes have been read, will return len
bytes.
in
- the stream from which the data is read.b
- the buffer into which the data is read.off
- the start offset in array b
at which the data is written.len
- the maximum number of bytes to read.java.io.IOException
- if reading from the stream failspublic static int readFully(java.nio.channels.ReadableByteChannel channel, java.nio.ByteBuffer b) throws java.io.IOException
channel.read(b)
, but tries to ensure
that the buffer is filled completely if possible, i.e. b.remaining()
returns 0.
If the end of file is reached before any bytes are read, returns -1. If the end of the file is reached after some bytes are read, returns the number of bytes read. If the end of the file isn't reached before the buffer has no more remaining capacity, will return the number of bytes that were read.
channel
- The byte-channel to read data fromb
- the buffer into which the data is read.java.io.IOException
- if reading from the stream failspublic static long copy(java.io.InputStream inp, java.io.OutputStream out) throws java.io.IOException
inp
- The InputStream
which provides the dataout
- The OutputStream
to write the data tojava.io.IOException
- If copying the data fails.public static long copy(java.io.InputStream inp, java.io.OutputStream out, long limit) throws java.io.IOException
inp
- The InputStream
which provides the dataout
- The OutputStream
to write the data tolimit
- limit the copied bytes - use -1
for no limitjava.io.IOException
- If copying the data fails.public static long copy(java.io.InputStream srcStream, java.io.File destFile) throws java.io.IOException
srcStream
- The InputStream
which provides the datadestFile
- The file where the data should be storedjava.io.IOException
- If the target directory does not exist and cannot be created
or if copying the data fails.public static long calculateChecksum(byte[] data)
public static long calculateChecksum(java.io.InputStream stream) throws java.io.IOException
IOUtils.calculateChecksum(IOUtils.toByteArray(stream))
java.io.IOException
public static void closeQuietly(java.io.Closeable closeable)
closeable
- resource to closepublic static long skipFully(java.io.InputStream input, long toSkip) throws java.io.IOException
InputStream
.
Note that the implementation uses InputStream.read(byte[], int, int)
rather
than delegating to InputStream.skip(long)
.
This means that the method may be considerably less efficient than using the actual skip implementation,
this is done to guarantee that the correct number of bytes are skipped.
This mimics POI's readFully(InputStream, byte[])
.
If the end of file is reached before any bytes are read, returns -1
. If
the end of the file is reached after some bytes are read, returns the
number of bytes read. If the end of the file isn't reached before len
bytes have been read, will return len
bytes.
Copied nearly verbatim from commons-io 41a3e9c
input
- byte stream to skiptoSkip
- number of bytes to skip.java.io.IOException
- if there is a problem reading the filejava.lang.IllegalArgumentException
- if toSkip is negativeInputStream.skip(long)
public static byte[] safelyAllocate(long length, int maxLength)
public static void safelyAllocateCheck(long length, int maxLength)
public static byte[] safelyClone(byte[] src, int offset, int length, int maxLength)
public static int readByte(java.io.InputStream is) throws java.io.IOException
is
- input stream to readjava.io.IOException
- on IOException or EOF if -1 is readCopyright 2022 The Apache Software Foundation or its licensors, as applicable.