1

我有一个输入流。首先,我需要获取 crc,这就是我所知道的,例如:

 CRCUtils.getCRC32(IOUtils.toByteArray(is))

我在 crcUtils 中有可以从字节数组计算它的方法。但后来我再次需要这个输入流,我不能使用前一个,因为它已经结束了。那么有没有选择如何获取 crc 和克隆的 is ?

4

4 回答 4

3

在读取流时使用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();
于 2017-02-26T11:34:45.463 回答
0

你可以这样做:

byte[] byteArr = IOUtils.toByteArray(is);
CRCUtils.getCRC32(byteArr);
InputStream is1 = new ByteArrayInputStream(byteArr); 
于 2013-02-26T15:25:30.083 回答
0

如果支持,您可以在输入流中使用标记。

于 2013-02-26T15:25:42.243 回答
0

如果您在处理文件之前不需要 CRC 值,您还可以创建一个子类FilteredInputStream,将它读取的所有内容传递给 CRC32,并使用一些额外的方法来获取 CRC 值。

于 2014-03-13T22:15:51.483 回答