/*
* 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;
}
}