public final class Streams
extends java.lang.Object
| Constructor and Description |
|---|
Streams() |
| Modifier and Type | Method and Description |
|---|---|
static void |
drain(java.io.InputStream inStr)
Read stream till EOF is encountered.
|
static void |
pipeAll(java.io.InputStream inStr,
java.io.OutputStream outStr)
Write the full contents of inStr to the destination stream outStr.
|
static void |
pipeAll(java.io.InputStream inStr,
java.io.OutputStream outStr,
int bufferSize)
Write the full contents of inStr to the destination stream outStr.
|
static long |
pipeAllLimited(java.io.InputStream inStr,
long limit,
java.io.OutputStream outStr)
Write up to limit bytes of data from inStr to the destination stream outStr.
|
static byte[] |
readAll(java.io.InputStream inStr)
Read stream fully, returning contents in a byte array.
|
static byte[] |
readAllLimited(java.io.InputStream inStr,
int limit)
Read from inStr up to a maximum number of bytes, throwing an exception if more the maximum amount
of requested data is available.
|
static int |
readFully(java.io.InputStream inStr,
byte[] buf)
Fully read in buf's length in data, or up to EOF, whichever occurs first,
|
static int |
readFully(java.io.InputStream inStr,
byte[] buf,
int off,
int len)
Fully read in len's bytes of data into buf, or up to EOF, whichever occurs first,
|
static byte[] |
readLenBytesFully(java.io.InputStream inStr,
int len)
Read exactly
len bytes from inStr and return them as a newly allocated array. |
static void |
validateBufferArguments(byte[] buf,
int off,
int len) |
static void |
writeBufTo(java.io.ByteArrayOutputStream buf,
java.io.OutputStream output) |
public static void drain(java.io.InputStream inStr)
throws java.io.IOException
inStr - stream to be emptied.java.io.IOException - in case of underlying IOException.public static void pipeAll(java.io.InputStream inStr,
java.io.OutputStream outStr)
throws java.io.IOException
inStr - source input stream.outStr - destination output stream.java.io.IOException - in case of underlying IOException.public static void pipeAll(java.io.InputStream inStr,
java.io.OutputStream outStr,
int bufferSize)
throws java.io.IOException
inStr - source input stream.outStr - destination output stream.bufferSize - the size of temporary buffer to use.java.io.IOException - in case of underlying IOException.public static long pipeAllLimited(java.io.InputStream inStr,
long limit,
java.io.OutputStream outStr)
throws java.io.IOException
inStr - source input stream.limit - the maximum number of bytes allowed to be read.outStr - destination output stream.java.io.IOException - in case of underlying IOException, or if limit is reached on inStr still has data in it.public static byte[] readAll(java.io.InputStream inStr)
throws java.io.IOException
inStr - stream to be read.java.io.IOException - in case of underlying IOException.public static byte[] readAllLimited(java.io.InputStream inStr,
int limit)
throws java.io.IOException
inStr - stream to be read.limit - maximum number of bytes that can be read.java.io.IOException - in case of underlying IOException, or if limit is reached on inStr still has data in it.public static int readFully(java.io.InputStream inStr,
byte[] buf)
throws java.io.IOException
inStr - the stream to be read.buf - the buffer to be read into.java.io.IOException - in case of underlying IOException.public static int readFully(java.io.InputStream inStr,
byte[] buf,
int off,
int len)
throws java.io.IOException
inStr - the stream to be read.buf - the buffer to be read into.off - offset into buf to start putting bytes into.len - the number of bytes to be read.java.io.IOException - in case of underlying IOException.public static byte[] readLenBytesFully(java.io.InputStream inStr,
int len)
throws java.io.IOException
len bytes from inStr and return them as a newly allocated array.
Unlike new byte[len] followed by readFully(InputStream, byte[]), the full-length
array is not allocated until the stream has actually delivered a quarter of the declared length, so
a caller passing an untrusted (possibly hostile) length cannot drive a large allocation from a short
input: a stream that ends before len bytes have been read fails with an EOFException,
having caused at most five times the delivered bytes plus 128 KiB to be allocated.
Lengths up to 128 KiB are allocated up front and read directly. Above that, the first quarter of the data is read into a rope of 64 KiB chunks, each allocated just ahead of its own fill; the result is then allocated once, the chunks copied into it and the remainder read directly into it. The only intermediate arrays are the chunks, so a read leaves no large-object garbage behind - a geometrically grown single buffer would instead leave one humongous array per doubling on G1 and the other region based collectors. The chunks are fresh zeroed arrays that are never reused: the stream is handed a reference to each of them, so pooling would not be hygienic.
inStr - the stream to read from.len - the exact number of bytes to read.byte[len] containing the bytes read.java.io.EOFException - if the stream ends before len bytes are available.java.io.IOException - on an underlying read error.java.lang.IllegalArgumentException - if len is negative.public static void validateBufferArguments(byte[] buf,
int off,
int len)
public static void writeBufTo(java.io.ByteArrayOutputStream buf,
java.io.OutputStream output)
throws java.io.IOException
java.io.IOException