/* * Copyright 2014 WANdisco * * WANdisco licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package c5db.util; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.Checksum; /** * InputStream decorator which computes a running CRC on every byte read. The CRC object is * passed in on construction, and its value can be obtained any time. This class does no buffering * on its input. */ @SuppressWarnings("NullableProblems") public class CrcInputStream extends FilterInputStream { private Checksum crc; public CrcInputStream(InputStream inputStream, Checksum crc) { super(inputStream); this.crc = crc; } public long getValue() { return crc.getValue(); } public void reset() { crc.reset(); } @Override public int read() throws IOException { int b = super.read(); crc.update(b); return b; } @Override public int read(byte[] b, int off, int len) throws IOException { int bytesRead = super.read(b, off, len); if (bytesRead > 0) { crc.update(b, off, bytesRead); } return bytesRead; } }