| // CheckedInputStream.java - Compute checksum of data being read. |
| |
| /* Copyright (C) 1999 Cygnus Solutions |
| |
| This file is part of libgcj. |
| |
| This software is copyrighted work licensed under the terms of the |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for |
| details. */ |
| |
| package java.util.zip; |
| |
| import java.io.FilterInputStream; |
| import java.io.InputStream; |
| import java.io.IOException; |
| |
| /** |
| * @author Tom Tromey |
| * @date May 17, 1999 |
| */ |
| |
| /* Written using on-line Java Platform 1.2 API Specification |
| * and JCL book. |
| * Believed complete and correct. |
| */ |
| |
| public class CheckedInputStream extends FilterInputStream |
| { |
| public CheckedInputStream (InputStream in, Checksum sum) |
| { |
| super (in); |
| this.sum = sum; |
| } |
| |
| public Checksum getChecksum () |
| { |
| return sum; |
| } |
| |
| public int read () throws IOException |
| { |
| int x = in.read(); |
| if (x != -1) |
| sum.update(x); |
| return x; |
| } |
| |
| public int read (byte[] buf, int off, int len) throws IOException |
| { |
| int r = in.read(buf, off, len); |
| if (r != -1) |
| sum.update(buf, off, r); |
| return r; |
| } |
| |
| public long skip (long n) throws IOException |
| { |
| if (n == 0) |
| return 0; |
| |
| int min = (int) Math.min(n, 1024); |
| byte[] buf = new byte[min]; |
| |
| long s = 0; |
| while (n > 0) |
| { |
| int r = in.read(buf, 0, min); |
| if (r == -1) |
| break; |
| n -= r; |
| s += r; |
| sum.update(buf, 0, r); |
| } |
| |
| return s; |
| } |
| |
| // The checksum object. |
| private Checksum sum; |
| } |