cryptix.util.mime
Class Base64InputStream

java.lang.Object
  |
  +--java.io.InputStream
        |
        +--java.io.FilterInputStream
              |
              +--cryptix.util.mime.Base64InputStream

public class Base64InputStream
extends java.io.FilterInputStream

This class implements a BASE64 Character stream encoder as specified in RFC1521, part of the MIME specification as published by the Internet Engineering Task Force (IETF).

Unlike other encoding schemes there is nothing in this encoding that indicates where a buffer starts or ends. In other words, the encoded text simply starts at the first line and ends with the last one.

Copyright © 1995-1997 Systemics Ltd on behalf of the Cryptix Development Team.
All rights reserved.

$Revision: 1.1.1.1 $

Since:
Cryptix 2.2.2
Author:
FH, Raif S. Naffah
See Also:
cryptix.mime.Base64OutputStream, cryptix.mime.Base64

Field Summary
(package private) static int CONV_OTHER
           
(package private) static int CONV_PAD
           
(package private) static int CONV_WHITE
           
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
Base64InputStream(java.io.InputStream is)
          Create a Base64InputStream with no checksum.
Base64InputStream(java.io.InputStream is, boolean check)
          If check is true then look for and check a PGP-style checksum immediately after the base64 portion.
Base64InputStream(java.io.InputStream is, java.util.zip.Checksum checksum, int length)
          Creates a Base64InputStream that uses the given checksum.
 
Method Summary
 int available()
          Returns the number of bytes that can be guaranteed to be read from this input stream without blocking.
 void close()
           
 void mark(int readlimit)
          Does nothing, since this class does not support mark/reset.
 boolean markSupported()
          Tests if this input stream supports the mark and reset methods of InputStream, which it does not.
 int read()
          Parse input in fours, producing three bytes to outBuf.
 int read(byte[] buffer, int offset, int length)
           
 void reset()
          Always throws an IOException, since this class does not support mark/reset.
 long skip(long n)
          Skips over and discards n bytes of data from the input stream.
 
Methods inherited from class java.io.FilterInputStream
read
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

CONV_WHITE

static final int CONV_WHITE

CONV_PAD

static final int CONV_PAD

CONV_OTHER

static final int CONV_OTHER
Constructor Detail

Base64InputStream

public Base64InputStream(java.io.InputStream is,
                         boolean check)
If check is true then look for and check a PGP-style checksum immediately after the base64 portion.
See Also:
PRZ24

Base64InputStream

public Base64InputStream(java.io.InputStream is)
Create a Base64InputStream with no checksum.

Base64InputStream

public Base64InputStream(java.io.InputStream is,
                         java.util.zip.Checksum checksum,
                         int length)
Creates a Base64InputStream that uses the given checksum. The checksum will be length bytes long, where 0 <= length <= 8.
Method Detail

close

public void close()
           throws java.io.IOException
Overrides:
close in class java.io.FilterInputStream

read

public int read()
         throws java.io.IOException
Parse input in fours, producing three bytes to outBuf. Should only see whitespace or illegal characters on a quadruplet boundary.

When using a checksum, wait for a "=" as the first character of a quadruplet; read sufficient quadruplets for crcLength bytes, and compare with our crc. If the end of the stream is reached at a bad spot, throw EOFException.

If we get the first illegal character on a four byte boundary, return -1 (Java EOF convention). Iff the underlying input stream is an instanceof PushbackInputStream, the illegal character will be pushed back.

Overrides:
read in class java.io.FilterInputStream
See Also:
PushbackInputStream

read

public int read(byte[] buffer,
                int offset,
                int length)
         throws java.io.IOException
Overrides:
read in class java.io.FilterInputStream

skip

public long skip(long n)
          throws java.io.IOException
Skips over and discards n bytes of data from the input stream. The skip method may, for a variety of reasons, end up skipping over some smaller number of bytes, possibly 0. The actual number of bytes skipped is returned.
Overrides:
skip in class java.io.FilterInputStream
Parameters:
n - the number of bytes to be skipped.
Returns:
the actual number of bytes skipped.
Throws:
java.io.IOException - if an I/O error occurs.

available

public int available()
              throws java.io.IOException
Returns the number of bytes that can be guaranteed to be read from this input stream without blocking. For a Base64InputStream, this is sometimes 0 even when data is available, because we do not read ahead far enough to determine whether the next character is the start of the checksum.
Overrides:
available in class java.io.FilterInputStream
Throws:
java.io.IOException - if an I/O error occurs.

mark

public void mark(int readlimit)
Does nothing, since this class does not support mark/reset.
Overrides:
mark in class java.io.FilterInputStream

reset

public void reset()
           throws java.io.IOException
Always throws an IOException, since this class does not support mark/reset.
Overrides:
reset in class java.io.FilterInputStream

markSupported

public boolean markSupported()
Tests if this input stream supports the mark and reset methods of InputStream, which it does not.
Overrides:
markSupported in class java.io.FilterInputStream
Returns:
false, since this class does not support the mark and reset methods.