public final void update(int i) { int b0 = (i >> 24) & 0xff; int b1 = (i >> 16) & 0xff; int b2 = (i >> 8) & 0xff; int b3 = i & 0xff; crc.update(b0); crc.update(b1); crc.update(b2); crc.update(b3); // com.oddlabs.tt.util.ChecksumLogger.log(i); }
/** * Reads up to {@code byteCount} bytes of data from the underlying input stream, storing it into * {@code buffer}, starting at offset {@code byteOffset}. The checksum is updated with the bytes * read. Returns 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. */ @Override public int read(byte[] buffer, int byteOffset, int byteCount) throws IOException { int bytesRead = in.read(buffer, byteOffset, byteCount); if (bytesRead != -1) { check.update(buffer, byteOffset, bytesRead); } return bytesRead; }
/** * 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. */ @Override public int read() throws IOException { int x = in.read(); if (x != -1) { check.update(x); } return x; }
/** * 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. */ @Override public int read(byte[] buf, int off, int nbytes) throws IOException { int x = in.read(buf, off, nbytes); if (x != -1) { check.update(buf, off, x); } return x; }
@Override public int read(byte b[], int off, int len) throws IOException { int bytesRead = super.read(b, off, len); log.trace("{} bytes read from {}", bytesRead, in); if (bytesRead != -1) { totalBytesRead += bytesRead; for (Checksum checksum : checksums) { checksum.update(b, off, bytesRead); } } return bytesRead; }
/** * 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. */ @Override public long skip(long nbytes) throws IOException { 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; }