HADOOP-7429. Add another IOUtils#copyBytes method. Contributed by Eli Collins
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1140442 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f43e0ffa7e
commit
3ebc992e58
|
@ -237,6 +237,8 @@ Trunk (unreleased changes)
|
||||||
HADOOP-310. Additional constructor requested in BytesWritable. (Brock
|
HADOOP-310. Additional constructor requested in BytesWritable. (Brock
|
||||||
Noland via atm)
|
Noland via atm)
|
||||||
|
|
||||||
|
HADOOP-7429. Add another IOUtils#copyBytes method. (eli)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
HADOOP-7333. Performance improvement in PureJavaCrc32. (Eric Caspole
|
HADOOP-7333. Performance improvement in PureJavaCrc32. (Eric Caspole
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class IOUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies from one stream to another.
|
* Copies from one stream to another.
|
||||||
|
*
|
||||||
* @param in InputStrem to read from
|
* @param in InputStrem to read from
|
||||||
* @param out OutputStream to write to
|
* @param out OutputStream to write to
|
||||||
* @param buffSize the size of the buffer
|
* @param buffSize the size of the buffer
|
||||||
|
@ -44,7 +45,6 @@ public class IOUtils {
|
||||||
*/
|
*/
|
||||||
public static void copyBytes(InputStream in, OutputStream out, int buffSize, boolean close)
|
public static void copyBytes(InputStream in, OutputStream out, int buffSize, boolean close)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
copyBytes(in, out, buffSize);
|
copyBytes(in, out, buffSize);
|
||||||
if(close) {
|
if(close) {
|
||||||
|
@ -70,7 +70,6 @@ public class IOUtils {
|
||||||
*/
|
*/
|
||||||
public static void copyBytes(InputStream in, OutputStream out, int buffSize)
|
public static void copyBytes(InputStream in, OutputStream out, int buffSize)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
PrintStream ps = out instanceof PrintStream ? (PrintStream)out : null;
|
PrintStream ps = out instanceof PrintStream ? (PrintStream)out : null;
|
||||||
byte buf[] = new byte[buffSize];
|
byte buf[] = new byte[buffSize];
|
||||||
int bytesRead = in.read(buf);
|
int bytesRead = in.read(buf);
|
||||||
|
@ -82,9 +81,11 @@ public class IOUtils {
|
||||||
bytesRead = in.read(buf);
|
bytesRead = in.read(buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies from one stream to another. <strong>closes the input and output streams
|
* Copies from one stream to another. <strong>closes the input and output streams
|
||||||
* at the end</strong>.
|
* at the end</strong>.
|
||||||
|
*
|
||||||
* @param in InputStrem to read from
|
* @param in InputStrem to read from
|
||||||
* @param out OutputStream to write to
|
* @param out OutputStream to write to
|
||||||
* @param conf the Configuration object
|
* @param conf the Configuration object
|
||||||
|
@ -96,7 +97,8 @@ public class IOUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies from one stream to another.
|
* Copies from one stream to another.
|
||||||
* @param in InputStrem to read from
|
*
|
||||||
|
* @param in InputStream to read from
|
||||||
* @param out OutputStream to write to
|
* @param out OutputStream to write to
|
||||||
* @param conf the Configuration object
|
* @param conf the Configuration object
|
||||||
* @param close whether or not close the InputStream and
|
* @param close whether or not close the InputStream and
|
||||||
|
@ -107,8 +109,37 @@ public class IOUtils {
|
||||||
copyBytes(in, out, conf.getInt("io.file.buffer.size", 4096), close);
|
copyBytes(in, out, conf.getInt("io.file.buffer.size", 4096), close);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Reads len bytes in a loop.
|
/**
|
||||||
* @param in The InputStream to read from
|
* Copies count bytes from one stream to another.
|
||||||
|
*
|
||||||
|
* @param in InputStream to read from
|
||||||
|
* @param out OutputStream to write to
|
||||||
|
* @param count number of bytes to copy
|
||||||
|
* @throws IOException if bytes can not be read or written
|
||||||
|
*/
|
||||||
|
public static void copyBytes(InputStream in, OutputStream out, long count)
|
||||||
|
throws IOException {
|
||||||
|
byte buf[] = new byte[4096];
|
||||||
|
long bytesRemaining = count;
|
||||||
|
int bytesRead;
|
||||||
|
|
||||||
|
while (bytesRemaining > 0) {
|
||||||
|
int bytesToRead = (int)
|
||||||
|
(bytesRemaining < buf.length ? bytesRemaining : buf.length);
|
||||||
|
|
||||||
|
bytesRead = in.read(buf, 0, bytesToRead);
|
||||||
|
if (bytesRead == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
out.write(buf, 0, bytesRead);
|
||||||
|
bytesRemaining -= bytesRead;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads len bytes in a loop.
|
||||||
|
*
|
||||||
|
* @param in InputStream to read from
|
||||||
* @param buf The buffer to fill
|
* @param buf The buffer to fill
|
||||||
* @param off offset from the buffer
|
* @param off offset from the buffer
|
||||||
* @param len the length of bytes to read
|
* @param len the length of bytes to read
|
||||||
|
@ -128,7 +159,8 @@ public class IOUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Similar to readFully(). Skips bytes in a loop.
|
/**
|
||||||
|
* Similar to readFully(). Skips bytes in a loop.
|
||||||
* @param in The InputStream to skip bytes from
|
* @param in The InputStream to skip bytes from
|
||||||
* @param len number of bytes to skip.
|
* @param len number of bytes to skip.
|
||||||
* @throws IOException if it could not skip requested number of bytes
|
* @throws IOException if it could not skip requested number of bytes
|
||||||
|
@ -147,6 +179,7 @@ public class IOUtils {
|
||||||
/**
|
/**
|
||||||
* Close the Closeable objects and <b>ignore</b> any {@link IOException} or
|
* Close the Closeable objects and <b>ignore</b> any {@link IOException} or
|
||||||
* null pointers. Must only be used for cleanup in exception handlers.
|
* null pointers. Must only be used for cleanup in exception handlers.
|
||||||
|
*
|
||||||
* @param log the log to record problems to at debug level. Can be null.
|
* @param log the log to record problems to at debug level. Can be null.
|
||||||
* @param closeables the objects to close
|
* @param closeables the objects to close
|
||||||
*/
|
*/
|
||||||
|
@ -167,6 +200,7 @@ public class IOUtils {
|
||||||
/**
|
/**
|
||||||
* Closes the stream ignoring {@link IOException}.
|
* Closes the stream ignoring {@link IOException}.
|
||||||
* Must only be called in cleaning up from exception handlers.
|
* Must only be called in cleaning up from exception handlers.
|
||||||
|
*
|
||||||
* @param stream the Stream to close
|
* @param stream the Stream to close
|
||||||
*/
|
*/
|
||||||
public static void closeStream(java.io.Closeable stream) {
|
public static void closeStream(java.io.Closeable stream) {
|
||||||
|
@ -175,10 +209,10 @@ public class IOUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closes the socket ignoring {@link IOException}
|
* Closes the socket ignoring {@link IOException}
|
||||||
|
*
|
||||||
* @param sock the Socket to close
|
* @param sock the Socket to close
|
||||||
*/
|
*/
|
||||||
public static void closeSocket(Socket sock) {
|
public static void closeSocket(Socket sock) {
|
||||||
// avoids try { close() } dance
|
|
||||||
if (sock != null) {
|
if (sock != null) {
|
||||||
try {
|
try {
|
||||||
sock.close();
|
sock.close();
|
||||||
|
@ -187,7 +221,8 @@ public class IOUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** /dev/null of OutputStreams.
|
/**
|
||||||
|
* The /dev/null of OutputStreams.
|
||||||
*/
|
*/
|
||||||
public static class NullOutputStream extends OutputStream {
|
public static class NullOutputStream extends OutputStream {
|
||||||
public void write(byte[] b, int off, int len) throws IOException {
|
public void write(byte[] b, int off, int len) throws IOException {
|
||||||
|
|
Loading…
Reference in New Issue