diff --git a/common/src/java/org/apache/hadoop/io/IOUtils.java b/common/src/java/org/apache/hadoop/io/IOUtils.java index 29db28032b..c60b95befe 100644 --- a/common/src/java/org/apache/hadoop/io/IOUtils.java +++ b/common/src/java/org/apache/hadoop/io/IOUtils.java @@ -115,24 +115,32 @@ public static void copyBytes(InputStream in, OutputStream out, Configuration con * @param in InputStream to read from * @param out OutputStream to write to * @param count number of bytes to copy + * @param close whether to close the streams * @throws IOException if bytes can not be read or written */ - public static void copyBytes(InputStream in, OutputStream out, long count) - throws IOException { + public static void copyBytes(InputStream in, OutputStream out, long count, + boolean close) throws IOException { byte buf[] = new byte[4096]; long bytesRemaining = count; int bytesRead; - while (bytesRemaining > 0) { - int bytesToRead = (int) - (bytesRemaining < buf.length ? bytesRemaining : buf.length); + try { + while (bytesRemaining > 0) { + int bytesToRead = (int) + (bytesRemaining < buf.length ? bytesRemaining : buf.length); - bytesRead = in.read(buf, 0, bytesToRead); - if (bytesRead == -1) - break; + bytesRead = in.read(buf, 0, bytesToRead); + if (bytesRead == -1) + break; - out.write(buf, 0, bytesRead); - bytesRemaining -= bytesRead; + out.write(buf, 0, bytesRead); + bytesRemaining -= bytesRead; + } + } finally { + if (close) { + closeStream(out); + closeStream(in); + } } }