org.spaceroots.jarmor
Class ASCII85Decoder

java.lang.Object
  extended byjava.io.InputStream
      extended byjava.io.FilterInputStream
          extended byorg.spaceroots.jarmor.AbstractDecoder
              extended byorg.spaceroots.jarmor.ASCII85Decoder

public class ASCII85Decoder
extends org.spaceroots.jarmor.AbstractDecoder

This class decodes a text stream containing into a binary stream.

The ASCII85encoding is suitable when binary data needs to be transmitted or stored as text. It has been defined by Adobe for the PostScript and PDF formats (see PDF Reference, section 3.3 Details of Filtered Streams).

The encoded stream is about 25% larger than the corresponding binary stream (32 binary bits are converted into 40 encoded bits, and there may be start/end of line markers).

Author:
Luc Maisonobe
See Also:
ASCII85Encoder

Field Summary
protected  byte[] encoded
          Encoded bytes buffer.
protected  boolean endReached
          End indicator.
protected  int nEncoded
          Number of bytes already in the encoded array.
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
ASCII85Decoder(InputStream in)
          Create a decoder wrapping a source of encoded data.
 
Method Summary
 int available()
          Get the number of bytes that can be read from this input stream without blocking.
 void close()
          Close the stream.
protected  int filterBytes()
          Filter some bytes from the underlying stream.
 boolean markSupported()
          Check if the FilterInputStream.mark(int) and FilterInputStream.reset() methods are supported.
protected  void putFilteredByte(int b)
          Put a filtered byte in the buffer.
 int read()
          Reads the next byte of data from this input stream.
 int read(byte[] b, int off, int len)
          Reads up to len bytes of data from this input stream into an array of bytes.
protected  int readEncodedBytes()
          Read new encoded bytes.
 long skip(long n)
          Skips over and discards n bytes of data from the input stream.
 
Methods inherited from class java.io.FilterInputStream
mark, read, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

encoded

protected byte[] encoded
Encoded bytes buffer.


nEncoded

protected int nEncoded
Number of bytes already in the encoded array.


endReached

protected boolean endReached
End indicator.

Constructor Detail

ASCII85Decoder

public ASCII85Decoder(InputStream in)
Create a decoder wrapping a source of encoded data.

Parameters:
in - source of encoded data to decode
Method Detail

filterBytes

protected int filterBytes()
                   throws IOException
Filter some bytes from the underlying stream.

Returns:
number of bytes inserted in the filtered bytes buffer or -1
Throws:
IOException - if the underlying stream throws one or if a non-ASCII85 character is encountered
See Also:
AbstractDecoder.putFilteredByte(int)

available

public int available()
              throws IOException
Get the number of bytes that can be read from this input stream without blocking.

Returns:
number of bytes that can be read from this input stream without blocking
Throws:
IOException - if the underlying stream throws one

read

public int read()
         throws IOException
Reads the next byte of data from this input stream.

Returns:
the next byte of data, or -1 if the end of the stream is reached.
Throws:
IOException - if the underlying stream throws one

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
Reads up to len bytes of data from this input stream into an array of bytes.

Parameters:
b - the buffer into which the data is read.
off - the start offset of the data.
len - the maximum number of bytes read.
Returns:
the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached
Throws:
IOException - if the underlying stream throws one

skip

public long skip(long n)
          throws IOException
Skips over and discards n bytes of data from the input stream.

Parameters:
n - the number of bytes to be skipped
Returns:
the actual number of bytes skipped
Throws:
IOException - if the underlying stream throws one

close

public void close()
           throws IOException
Close the stream.

Throws:
IOException - if the underlying stream throws one

markSupported

public boolean markSupported()
Check if the FilterInputStream.mark(int) and FilterInputStream.reset() methods are supported.

Returns:
always false

readEncodedBytes

protected int readEncodedBytes()
                        throws IOException
Read new encoded bytes.

Returns:
number of bytes read or -1 if the underlying stream has no bytes left
Throws:
IOException - if the underlying stream throws one

putFilteredByte

protected void putFilteredByte(int b)
Put a filtered byte in the buffer.

The filtered bytes buffer will be expanded if it already contains too many pending bytes.

Parameters:
b - byte to put in the filtered buffer


Copyright © 2005-2006 Luc Maisonobe. All Rights Reserved.