FileDocCategorySizeDatePackage
CheckedInputStream.javaAPI DocAndroid 1.5 API4502Wed May 06 22:41:02 BST 2009java.util.zip

CheckedInputStream

public class CheckedInputStream extends FilterInputStream
The {@code CheckedInputStream} class is used to maintain a checksum at the same time as the data, on which the checksum is computed, is read from a stream. The purpose of this checksum is to establish data integrity, comparing the computed checksum against a published checksum value.
since
Android 1.0

Fields Summary
private final Checksum
check
Constructors Summary
public CheckedInputStream(InputStream is, Checksum csum)
Constructs a new {@code CheckedInputStream} on {@code InputStream} {@code is}. The checksum will be calculated using the algorithm implemented by {@code csum}.

param
is the input stream to calculate checksum from.
param
csum an entity implementing the checksum algorithm.
since
Android 1.0

        super(is);
        check = csum;
    
Methods Summary
public java.util.zip.ChecksumgetChecksum()
Returns the checksum calculated on the stream read so far.

return
the updated checksum.
since
Android 1.0

        return check;
    
public intread()
Reads one byte of data from the underlying input stream and updates the checksum with the byte data.

return
{@code -1} at the end of the stream, a single byte value otherwise.
throws
IOException if an {@code IOException} occurs.
since
Android 1.0

        int x = in.read();
        if (x != -1) {
            check.update(x);
        }
        return x;
    
public intread(byte[] buf, int off, int nbytes)
Reads up to n bytes of data from the underlying input stream, storing it into {@code buf}, starting at offset {@code off}. The checksum is updated with the bytes read.

param
buf the byte array in which to store the bytes read.
param
off the initial position in {@code buf} to store the bytes read from this stream.
param
nbytes the maximum number of bytes to store in {@code buf}.
return
the number of bytes actually read or {@code -1} if arrived at the end of the filtered stream while reading the data.
throws
IOException if this stream is closed or some I/O error occurs.
since
Android 1.0

        int x = in.read(buf, off, nbytes);
        if (x != -1) {
            check.update(buf, off, x);
        }
        return x;
    
public longskip(long nbytes)
Skip up to n bytes of data on the underlying input stream. Any skipped bytes are added to the running checksum value.

param
nbytes the number of bytes to skip.
throws
IOException if this stream is closed or another I/O error occurs.
return
the number of bytes skipped.
since
Android 1.0

        if (nbytes < 1) {
            return 0;
        }
        long skipped = 0;
        byte[] b = new byte[2048];
        int x, v;
        while (skipped != nbytes) {
            x = in.read(b, 0,
                    (v = (int) (nbytes - skipped)) > b.length ? b.length : v);
            if (x == -1) {
                return skipped;
            }
            check.update(b, 0, x);
            skipped += x;
        }
        return skipped;