From 083f338e3560c516f4a6cbbe370bfc304ee14e0f Mon Sep 17 00:00:00 2001 From: Jeremias Maerki Date: Mon, 2 Dec 2002 14:15:08 +0000 Subject: [PATCH] style and javadocs added new method toByteArray() git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@195708 13f79535-47bb-0310-9956-ffa450edef68 --- src/org/apache/fop/util/StreamUtilities.java | 70 +++++++++++++++++--- 1 file changed, 61 insertions(+), 9 deletions(-) diff --git a/src/org/apache/fop/util/StreamUtilities.java b/src/org/apache/fop/util/StreamUtilities.java index 418d656e0..f88fc1d91 100644 --- a/src/org/apache/fop/util/StreamUtilities.java +++ b/src/org/apache/fop/util/StreamUtilities.java @@ -8,6 +8,7 @@ package org.apache.fop.util; import java.io.InputStream; import java.io.OutputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.EOFException; import java.io.DataInput; @@ -29,6 +30,10 @@ public class StreamUtilities { * The process is buffered, so you shouldn't need * BufferedInput/OutputStreams. Flushes when it's finished, but does * not close either stream. Returns the number of bytes copied. + * @param source InputStream to read from + * @param sink OutputStream to write to + * @return long the total number of bytes copied + * @throws IOException In case of an I/O problem */ public static long streamCopy(InputStream source, OutputStream sink) throws IOException { @@ -39,8 +44,9 @@ public class StreamUtilities { // trough int scoop; while ((scoop = source.read(buffer)) >= 0) { - if (scoop == 0) + if (scoop == 0) { System.out.println("zero scoop!"); + } sink.write(buffer, 0, scoop); total += scoop; } @@ -51,6 +57,9 @@ public class StreamUtilities { return total; } + /** + * Method streamCopy. + */ /** * Binary copies up to the given number of bytes from an input * stream to an output stream. The process is buffered, so you @@ -58,7 +67,11 @@ public class StreamUtilities { * Flushes when it's finished, but does not close either stream. * Throws an EOFExeption if there aren't enough bytes available to * transfer the requested amount. - * Returns the total number of bytes copied. + * @param source InputStream to read from + * @param sink OutputStream to write to + * @param howMany requested amount of bytes that are to be copied + * @return long the total number of bytes copied + * @throws IOException In case of an I/O problem */ public static long streamCopy(InputStream source, OutputStream sink, int howMany) throws IOException { @@ -70,10 +83,12 @@ public class StreamUtilities { int scoop; while (left > 0) { scoop = source.read(buffer, 0, Math.min(BUFFER_SIZE, left)); - if (scoop < 0) + if (scoop < 0) { throw new EOFException( - "Not enough bytes to feed you in IOLib.streamCopy(source, sink, howMany); you asked for " + - howMany + " and I only have " + (howMany - left)); + "Not enough bytes to feed you in " + + "IOLib.streamCopy(source, sink, howMany); you asked for " + + howMany + " and I only have " + (howMany - left)); + } sink.write(buffer, 0, scoop); left -= scoop; @@ -85,6 +100,9 @@ public class StreamUtilities { return howMany; } + /** + * Method streamCopyWithChecksum. + */ /** * Binary copies up to the given number of bytes from an input * stream to an output stream. The process is buffered, so you @@ -92,7 +110,11 @@ public class StreamUtilities { * Flushes when it's finished, but does not close either stream. * Throws an EOFExeption if there aren't enough bytes available * to transfer the requested amount. - * Returns the checksum of the bytes copied. + * @param source InputStream to read from + * @param sink OutputStream to write to + * @param howMany requested amount of bytes that are to be copied + * @return long the checksum of the bytes copied + * @throws IOException In case of an I/O problem */ public static long streamCopyWithChecksum(InputStream source, OutputStream sink, int howMany) throws IOException { @@ -105,8 +127,10 @@ public class StreamUtilities { int scoop; while (left > 0) { scoop = source.read(buffer, 0, Math.min(BUFFER_SIZE, left)); - if (scoop < 0) - throw new EOFException("Not enough bytes to feed you in IOLib.streamCopy(source, sink, howMany)"); + if (scoop < 0) { + throw new EOFException("Not enough bytes to feed you in " + + "IOLib.streamCopy(source, sink, howMany)"); + } checksummer.update(buffer, 0, scoop); sink.write(buffer, 0, scoop); @@ -119,11 +143,18 @@ public class StreamUtilities { return checksummer.getValue(); } + /** + * Method dataCopy. + */ /** * Binary copies up to the given number of bytes from a DataInput * object to an DataOutput object. The process is buffered. Since * DataOutput doesn't support closing or flushing, it does neither. - * Returns the total number of bytes copied. + * @param source DataInput to read from + * @param sink DataOutput to write to + * @param howMany requested amount of bytes that are to be copied + * @return long the total number of bytes copied + * @throws IOException In case of an I/O problem */ public static long dataCopy(DataInput source, DataOutput sink, int howMany) throws IOException { @@ -144,4 +175,25 @@ public class StreamUtilities { return howMany; } + + /** + * Loads the contents of the InputStream to a byte array. The InputStream + * isn't closed. + * @param in InputStream to read from + * @param initialTargetBufferSize initial number of bytes to allocate + * (expected size to avoid a lot of reallocations) + * @return byte[] the array of bytes requested + * @throws IOException In case of an I/O problem + */ + public static byte[] toByteArray(InputStream in, int initialTargetBufferSize) + throws IOException { + ByteArrayOutputStream baout = new ByteArrayOutputStream(initialTargetBufferSize); + try { + streamCopy(in, baout); + } finally { + baout.close(); + } + return baout.toByteArray(); + } + } -- 2.39.5