Java 如何获取输入流的crc并返回该流的克隆

Java 如何获取输入流的crc并返回该流的克隆,java,inputstream,Java,Inputstream,我有一个输入流。首先我需要得到crc,这是我知道如何做的,例如: CRCUtils.getCRC32(IOUtils.toByteArray(is)) 我在crcUtils中有一个方法,可以从字节数组计算它。但我需要这个输入流再次,我不能使用前一个,因为它达到了终点。那么,有没有办法获得is的crc和克隆?您可以这样做: byte[] byteArr = IOUtils.toByteArray(is); CRCUtils.getCRC32(byteArr); InputStream is1

我有一个输入流。首先我需要得到crc,这是我知道如何做的,例如:

 CRCUtils.getCRC32(IOUtils.toByteArray(is))
我在crcUtils中有一个方法,可以从字节数组计算它。但我需要这个输入流再次,我不能使用前一个,因为它达到了终点。那么,有没有办法获得is的crc和克隆?

您可以这样做:

byte[] byteArr = IOUtils.toByteArray(is);
CRCUtils.getCRC32(byteArr);
InputStream is1 = new ByteArrayInputStream(byteArr); 

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

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

用于在读取流时计算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();