我有一个输入流。首先,我需要获取 crc,这就是我所知道的,例如:
CRCUtils.getCRC32(IOUtils.toByteArray(is))
我在 crcUtils 中有可以从字节数组计算它的方法。但后来我再次需要这个输入流,我不能使用前一个,因为它已经结束了。那么有没有选择如何获取 crc 和克隆的 is ?
我有一个输入流。首先,我需要获取 crc,这就是我所知道的,例如:
CRCUtils.getCRC32(IOUtils.toByteArray(is))
我在 crcUtils 中有可以从字节数组计算它的方法。但后来我再次需要这个输入流,我不能使用前一个,因为它已经结束了。那么有没有选择如何获取 crc 和克隆的 is ?
在读取流时使用CheckedInputStream计算 CRC:
CRC32 crc = new CRC32();
try (InputStream in = new CheckedInputStream(new FileInputStream("myfile"), crc)) {
// read the input ...
}
// now crc contains the checksum of the input
long crc32 = crc.getValue();
你可以这样做:
byte[] byteArr = IOUtils.toByteArray(is);
CRCUtils.getCRC32(byteArr);
InputStream is1 = new ByteArrayInputStream(byteArr);
如果支持,您可以在输入流中使用标记。
如果您在处理文件之前不需要 CRC 值,您还可以创建一个子类FilteredInputStream
,将它读取的所有内容传递给 CRC32,并使用一些额外的方法来获取 CRC 值。