public final class IOUtil extends Object
This class provides static utility methods for input/output operations, particularly buffered copying between sources
(InputStream
, Reader
, String
and byte[]
) and destinations
(OutputStream
, Writer
, String
and byte[]
).
Unless otherwise noted, these copy
methods do not flush or close the streams. Often, doing so
would require making non-portable assumptions about the streams' origin and further use. This means that both
streams' close()
methods must be called after copying. if one omits this step, then the stream resources
(sockets, file descriptors) are released when the associated Stream is garbage-collected. It is not a good idea to
rely on this mechanism. For a good overview of the distinction between "memory management" and "resource management",
see this UnixReview article
For each copy
method, a variant is provided that allows the caller to specify the buffer size (the
default is 4k). As the buffer size can have a fairly large impact on speed, this may be worth tweaking. Often "large
buffer -> faster" does not hold, even for large data transfers.
For byte-to-char methods, a copy
variant allows the encoding to be selected (otherwise the platform
default is used).
The copy
methods use an internal buffer when copying. It is therefore advisable not to
deliberately wrap the stream arguments to the copy
methods in Buffered*
streams. For
example, don't do the following:
copy( new BufferedInputStream( in ), new BufferedOutputStream( out ) );
The rationale is as follows:
Imagine that an InputStream's read() is a very expensive operation, which would usually suggest wrapping in a
BufferedInputStream. The BufferedInputStream works by issuing infrequent
InputStream.read(byte[] b, int off, int len)
requests on the underlying InputStream, to fill an
internal buffer, from which further read
requests can inexpensively get their data (until the buffer
runs out).
However, the copy
methods do the same thing, keeping an internal buffer, populated by
InputStream.read(byte[] b, int off, int len)
requests. Having two buffers (or three if the destination stream
is also buffered) is pointless, and the unnecessary buffer management hurts performance slightly (about 3%, according
to some simple experiments).
Modifier and Type | Method and Description |
---|---|
static void |
bufferedCopy(InputStream input,
OutputStream output)
Deprecated.
Buffering streams is actively harmful! See the class description as to why. Use
copy(InputStream, OutputStream) instead. |
static void |
close(Channel channel)
Deprecated.
use try-with-resources instead
|
static void |
close(InputStream inputStream)
Deprecated.
use try-with-resources instead
|
static void |
close(OutputStream outputStream)
Deprecated.
use try-with-resources instead
|
static void |
close(Reader reader)
Deprecated.
use try-with-resources instead
|
static void |
close(Writer writer)
Deprecated.
use try-with-resources instead
|
static boolean |
contentEquals(InputStream input1,
InputStream input2)
Compare the contents of two Streams to determine if they are equal or not.
|
static void |
copy(byte[] input,
OutputStream output)
Copy bytes from a
byte[] to an OutputStream . |
static void |
copy(byte[] input,
OutputStream output,
int bufferSize)
Copy bytes from a
byte[] to an OutputStream . |
static void |
copy(byte[] input,
Writer output)
Copy and convert bytes from a
byte[] to chars on a Writer . |
static void |
copy(byte[] input,
Writer output,
int bufferSize)
Copy and convert bytes from a
byte[] to chars on a Writer . |
static void |
copy(byte[] input,
Writer output,
String encoding)
Copy and convert bytes from a
byte[] to chars on a Writer , using the specified
encoding. |
static void |
copy(byte[] input,
Writer output,
String encoding,
int bufferSize)
Copy and convert bytes from a
byte[] to chars on a Writer , using the specified
encoding. |
static void |
copy(InputStream input,
OutputStream output)
Copy bytes from an
InputStream to an OutputStream . |
static void |
copy(InputStream input,
OutputStream output,
int bufferSize)
Copy bytes from an
InputStream to an OutputStream . |
static void |
copy(InputStream input,
Writer output)
Copy and convert bytes from an
InputStream to chars on a Writer . |
static void |
copy(InputStream input,
Writer output,
int bufferSize)
Copy and convert bytes from an
InputStream to chars on a Writer . |
static void |
copy(InputStream input,
Writer output,
String encoding)
Copy and convert bytes from an
InputStream to chars on a Writer , using the specified
encoding. |
static void |
copy(InputStream input,
Writer output,
String encoding,
int bufferSize)
Copy and convert bytes from an
InputStream to chars on a Writer , using the specified
encoding. |
static void |
copy(Reader input,
OutputStream output)
Serialize chars from a
Reader to bytes on an OutputStream , and flush the
OutputStream . |
static void |
copy(Reader input,
OutputStream output,
int bufferSize)
Serialize chars from a
Reader to bytes on an OutputStream , and flush the
OutputStream . |
static void |
copy(Reader input,
Writer output)
Copy chars from a
Reader to a Writer . |
static void |
copy(Reader input,
Writer output,
int bufferSize)
Copy chars from a
Reader to a Writer . |
static void |
copy(String input,
OutputStream output)
Serialize chars from a
String to bytes on an OutputStream , and flush the
OutputStream . |
static void |
copy(String input,
OutputStream output,
int bufferSize)
Serialize chars from a
String to bytes on an OutputStream , and flush the
OutputStream . |
static void |
copy(String input,
Writer output)
Copy chars from a
String to a Writer . |
static byte[] |
toByteArray(InputStream input) |
static byte[] |
toByteArray(InputStream input,
int bufferSize) |
static byte[] |
toByteArray(Reader input) |
static byte[] |
toByteArray(Reader input,
int bufferSize) |
static byte[] |
toByteArray(String input) |
static byte[] |
toByteArray(String input,
int bufferSize) |
static String |
toString(byte[] input) |
static String |
toString(byte[] input,
int bufferSize) |
static String |
toString(byte[] input,
String encoding) |
static String |
toString(byte[] input,
String encoding,
int bufferSize) |
static String |
toString(InputStream input) |
static String |
toString(InputStream input,
int bufferSize) |
static String |
toString(InputStream input,
String encoding) |
static String |
toString(InputStream input,
String encoding,
int bufferSize) |
static String |
toString(Reader input) |
static String |
toString(Reader input,
int bufferSize) |
public static void copy(InputStream input, OutputStream output) throws IOException
InputStream
to an OutputStream
.input
- to convertoutput
- the resultIOException
- io issuepublic static void copy(InputStream input, OutputStream output, int bufferSize) throws IOException
InputStream
to an OutputStream
.input
- to convertoutput
- the resultbufferSize
- Size of internal buffer to use.IOException
- io issuepublic static void copy(Reader input, Writer output) throws IOException
Reader
to a Writer
.input
- to convertoutput
- the resultIOException
- io issuepublic static void copy(Reader input, Writer output, int bufferSize) throws IOException
Reader
to a Writer
.input
- to convertoutput
- the resultbufferSize
- Size of internal buffer to use.IOException
- io issuepublic static void copy(InputStream input, Writer output) throws IOException
InputStream
to chars on a Writer
. The platform's default
encoding is used for the byte-to-char conversion.input
- to convertoutput
- the resultIOException
- io issuepublic static void copy(InputStream input, Writer output, int bufferSize) throws IOException
InputStream
to chars on a Writer
. The platform's default
encoding is used for the byte-to-char conversion.input
- to convertoutput
- the resultbufferSize
- Size of internal buffer to use.IOException
- io issuepublic static void copy(InputStream input, Writer output, String encoding) throws IOException
InputStream
to chars on a Writer
, using the specified
encoding.input
- to convertoutput
- the resultencoding
- The name of a supported character encoding. See the
IANA Charset Registry for a list of valid
encoding types.IOException
- io issuepublic static void copy(InputStream input, Writer output, String encoding, int bufferSize) throws IOException
InputStream
to chars on a Writer
, using the specified
encoding.input
- to convertoutput
- the resultencoding
- The name of a supported character encoding. See the
IANA Charset Registry for a list of valid
encoding types.bufferSize
- Size of internal buffer to use.IOException
- io issuepublic static String toString(InputStream input) throws IOException
input
- to convertInputStream
as a String. The platform's default encoding is used for the
byte-to-char conversion.IOException
- io issuepublic static String toString(InputStream input, int bufferSize) throws IOException
input
- to convertbufferSize
- Size of internal buffer to use.InputStream
as a String. The platform's default encoding is used for the
byte-to-char conversion.IOException
- io issuepublic static String toString(InputStream input, String encoding) throws IOException
input
- to convertencoding
- The name of a supported character encoding. See the
IANA Charset Registry for a list of valid
encoding types.InputStream
as a String.IOException
- io issuepublic static String toString(InputStream input, String encoding, int bufferSize) throws IOException
input
- to convertencoding
- The name of a supported character encoding. See the
IANA Charset Registry for a list of valid
encoding types.bufferSize
- Size of internal buffer to use.InputStream
as a String.IOException
- io issuepublic static byte[] toByteArray(InputStream input) throws IOException
input
- to convertInputStream
as a byte[]
.IOException
- io issuepublic static byte[] toByteArray(InputStream input, int bufferSize) throws IOException
input
- to convertbufferSize
- Size of internal buffer to use.InputStream
as a byte[]
.IOException
- io issuepublic static void copy(Reader input, OutputStream output) throws IOException
Reader
to bytes on an OutputStream
, and flush the
OutputStream
.input
- to convertoutput
- the resultIOException
- io issuepublic static void copy(Reader input, OutputStream output, int bufferSize) throws IOException
Reader
to bytes on an OutputStream
, and flush the
OutputStream
.input
- to convertoutput
- the resultbufferSize
- Size of internal buffer to use.IOException
- io issuepublic static String toString(Reader input) throws IOException
input
- to convertReader
as a String.IOException
- io issuepublic static String toString(Reader input, int bufferSize) throws IOException
input
- to convertbufferSize
- Size of internal buffer to use.Reader
as a String.IOException
- io issuepublic static byte[] toByteArray(Reader input) throws IOException
input
- to convertReader
as a byte[]
.IOException
- io issuepublic static byte[] toByteArray(Reader input, int bufferSize) throws IOException
input
- to convertbufferSize
- Size of internal buffer to use.Reader
as a byte[]
.IOException
- io issuepublic static void copy(String input, OutputStream output) throws IOException
String
to bytes on an OutputStream
, and flush the
OutputStream
.input
- to convertoutput
- the resultIOException
- io issuepublic static void copy(String input, OutputStream output, int bufferSize) throws IOException
String
to bytes on an OutputStream
, and flush the
OutputStream
.input
- to convertoutput
- the resultbufferSize
- Size of internal buffer to use.IOException
- io issuepublic static void copy(String input, Writer output) throws IOException
String
to a Writer
.input
- to convertoutput
- the resultIOException
- io issue@Deprecated public static void bufferedCopy(InputStream input, OutputStream output) throws IOException
copy(InputStream, OutputStream)
instead.InputStream
to an OutputStream
, with buffering. This is equivalent
to passing a BufferedInputStream
and BufferedOutputStream
to
copy(InputStream, OutputStream)
, and flushing the output stream afterwards. The streams are not closed
after the copy.input
- to convertoutput
- the resultIOException
- io issuepublic static byte[] toByteArray(String input) throws IOException
input
- to convertString
as a byte[]
.IOException
- io issuepublic static byte[] toByteArray(String input, int bufferSize) throws IOException
input
- to convertbufferSize
- Size of internal buffer to use.String
as a byte[]
.IOException
- io issuepublic static void copy(byte[] input, Writer output) throws IOException
byte[]
to chars on a Writer
. The platform's default
encoding is used for the byte-to-char conversion.input
- to convertoutput
- the resultIOException
- io issuepublic static void copy(byte[] input, Writer output, int bufferSize) throws IOException
byte[]
to chars on a Writer
. The platform's default
encoding is used for the byte-to-char conversion.input
- to convertoutput
- the resultbufferSize
- Size of internal buffer to use.IOException
- io issuepublic static void copy(byte[] input, Writer output, String encoding) throws IOException
byte[]
to chars on a Writer
, using the specified
encoding.input
- to convertoutput
- the resultencoding
- The name of a supported character encoding. See the
IANA Charset Registry for a list of valid
encoding types.IOException
- io issuepublic static void copy(byte[] input, Writer output, String encoding, int bufferSize) throws IOException
byte[]
to chars on a Writer
, using the specified
encoding.input
- to convertoutput
- the resultencoding
- The name of a supported character encoding. See the
IANA Charset Registry for a list of valid
encoding types.bufferSize
- Size of internal buffer to use.IOException
- io issuepublic static String toString(byte[] input) throws IOException
input
- to convertbyte[]
as a String. The platform's default encoding is used for the
byte-to-char conversion.IOException
- io issuepublic static String toString(byte[] input, int bufferSize) throws IOException
input
- to convertbufferSize
- Size of internal buffer to use.byte[]
as a String. The platform's default encoding is used for the
byte-to-char conversion.IOException
- io issuepublic static String toString(byte[] input, String encoding) throws IOException
input
- to convertencoding
- The name of a supported character encoding. See the
IANA Charset Registry for a list of valid
encoding types.byte[]
as a String.IOException
- io issuepublic static String toString(byte[] input, String encoding, int bufferSize) throws IOException
input
- to convertencoding
- The name of a supported character encoding. See the
IANA Charset Registry for a list of valid
encoding types.bufferSize
- Size of internal buffer to use.byte[]
as a String.IOException
- io issuepublic static void copy(byte[] input, OutputStream output) throws IOException
byte[]
to an OutputStream
.input
- to convertoutput
- the resultIOException
- io issuepublic static void copy(byte[] input, OutputStream output, int bufferSize) throws IOException
byte[]
to an OutputStream
.input
- to convertoutput
- the resultbufferSize
- Size of internal buffer to use.IOException
- io issuepublic static boolean contentEquals(InputStream input1, InputStream input2) throws IOException
input1
- the first streaminput2
- the second streamIOException
- io issue@Deprecated public static void close(InputStream inputStream)
inputStream
- The stream to close.@Deprecated public static void close(Channel channel)
channel
- The stream to close.@Deprecated public static void close(OutputStream outputStream)
outputStream
- The stream to close.@Deprecated public static void close(Reader reader)
reader
- The reader to close.@Deprecated public static void close(Writer writer)
writer
- The writer to close.Copyright © 2001–2022 The Apache Software Foundation. All rights reserved.