Author: ggregory Date: Mon Mar 19 19:48:00 2012 New Revision: 1302622 URL: http://svn.apache.org/viewvc?rev=1302622&view=rev Log: [CODEC-130] Base64InputStream.skip skips underlying stream, not output. Better exception information. Less verbose code with a single return. Order methods AB.
Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/binary/BaseNCodecInputStream.java Modified: commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/binary/BaseNCodecInputStream.java URL: http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/binary/BaseNCodecInputStream.java?rev=1302622&r1=1302621&r2=1302622&view=diff ============================================================================== --- commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/binary/BaseNCodecInputStream.java (original) +++ commons/proper/codec/trunk/src/main/java/org/apache/commons/codec/binary/BaseNCodecInputStream.java Mon Mar 19 19:48:00 2012 @@ -30,10 +30,10 @@ import java.io.InputStream; */ public class BaseNCodecInputStream extends FilterInputStream { - private final boolean doEncode; - private final BaseNCodec baseNCodec; + private final boolean doEncode; + private final byte[] singleByte = new byte[1]; protected BaseNCodecInputStream(InputStream in, BaseNCodec baseNCodec, boolean doEncode) { @@ -43,6 +43,31 @@ public class BaseNCodecInputStream exten } /** + * {@inheritDoc} + * + * @return <code>0</code> if the {@link InputStream} has reached <code>EOF</code>, + * <code>1</code> otherwise + */ + public int available() throws IOException { + // Note: the logic is similar to the InflaterInputStream: + // as long as we have not reached EOF, indicate that there is more + // data available. As we do not know for sure how much data is left, + // just return 1 as a safe guess. + + // use the EOF flag of the underlying codec instance + return baseNCodec.eof ? 0 : 1; + } + + /** + * {@inheritDoc} + * + * @return false + */ + @Override + public boolean markSupported() { + return false; // not an easy job to support marks + } + /** * Reads one <code>byte</code> from this input stream. * * @return the byte as an integer in the range 0 to 255. Returns -1 if EOF has been reached. @@ -124,15 +149,6 @@ public class BaseNCodecInputStream exten return readLen; } } - /** - * {@inheritDoc} - * - * @return false - */ - @Override - public boolean markSupported() { - return false; // not an easy job to support marks - } /** * {@inheritDoc} @@ -142,7 +158,7 @@ public class BaseNCodecInputStream exten @Override public long skip(long n) throws IOException { if (n < 0) { - throw new IllegalArgumentException("Negative skip length"); + throw new IllegalArgumentException("Negative skip length: " + n); } // skip in chunks of 512 bytes @@ -164,24 +180,4 @@ public class BaseNCodecInputStream exten return total; } - - /** - * {@inheritDoc} - * - * @return <code>0</code> if the {@link InputStream} has reached <code>EOF</code>, - * <code>1</code> otherwise - */ - public int available() throws IOException { - // Note: the logic is similar to the InflaterInputStream: - // as long as we have not reached EOF, indicate that there is more - // data available. As we do not know for sure how much data is left, - // just return 1 as a safe guess. - - // use the EOF flag of the underlying codec instance - if (baseNCodec.eof) { - return 0; - } else { - return 1; - } - } }