FileDocCategorySizeDatePackage
Base64InputStream.javaAPI DocAndroid 5.1 API4414Thu Mar 12 22:22:10 GMT 2015android.util

Base64InputStream

public class Base64InputStream extends FilterInputStream
An InputStream that does Base64 decoding on the data read through it.

Fields Summary
private final Base64.Coder
coder
private static byte[]
EMPTY
private static final int
BUFFER_SIZE
private boolean
eof
private byte[]
inputBuffer
private int
outputStart
private int
outputEnd
Constructors Summary
public Base64InputStream(InputStream in, int flags)
An InputStream that performs Base64 decoding on the data read from the wrapped stream.

param
in the InputStream to read the source data from
param
flags bit flags for controlling the decoder; see the constants in {@link Base64}


                                                      
         
        this(in, flags, false);
    
public Base64InputStream(InputStream in, int flags, boolean encode)
Performs Base64 encoding or decoding on the data read from the wrapped InputStream.

param
in the InputStream to read the source data from
param
flags bit flags for controlling the decoder; see the constants in {@link Base64}
param
encode true to encode, false to decode
hide

        super(in);
        eof = false;
        inputBuffer = new byte[BUFFER_SIZE];
        if (encode) {
            coder = new Base64.Encoder(flags, null);
        } else {
            coder = new Base64.Decoder(flags, null);
        }
        coder.output = new byte[coder.maxOutputSize(BUFFER_SIZE)];
        outputStart = 0;
        outputEnd = 0;
    
Methods Summary
public intavailable()

        return outputEnd - outputStart;
    
public voidclose()

        in.close();
        inputBuffer = null;
    
public voidmark(int readlimit)

        throw new UnsupportedOperationException();
    
public booleanmarkSupported()

        return false;
    
public intread(byte[] b, int off, int len)

        if (outputStart >= outputEnd) {
            refill();
        }
        if (outputStart >= outputEnd) {
            return -1;
        }
        int bytes = Math.min(len, outputEnd-outputStart);
        System.arraycopy(coder.output, outputStart, b, off, bytes);
        outputStart += bytes;
        return bytes;
    
public intread()

        if (outputStart >= outputEnd) {
            refill();
        }
        if (outputStart >= outputEnd) {
            return -1;
        } else {
            return coder.output[outputStart++] & 0xff;
        }
    
private voidrefill()
Read data from the input stream into inputBuffer, then decode/encode it into the empty coder.output, and reset the outputStart and outputEnd pointers.

        if (eof) return;
        int bytesRead = in.read(inputBuffer);
        boolean success;
        if (bytesRead == -1) {
            eof = true;
            success = coder.process(EMPTY, 0, 0, true);
        } else {
            success = coder.process(inputBuffer, 0, bytesRead, false);
        }
        if (!success) {
            throw new Base64DataException("bad base-64");
        }
        outputEnd = coder.op;
        outputStart = 0;
    
public voidreset()

        throw new UnsupportedOperationException();
    
public longskip(long n)

        if (outputStart >= outputEnd) {
            refill();
        }
        if (outputStart >= outputEnd) {
            return 0;
        }
        long bytes = Math.min(n, outputEnd-outputStart);
        outputStart += bytes;
        return bytes;