我的文件包含开头包含未加密的标头数据,然后其余部分包含加密的标头数据。 我希望能够使用BufferedInputStream / FileInputSteam读取头数据。 接下来我想使用CipherInputStream开始读取其余的加密数据,CipherInputStream使用相同的BuffereredInputStream作为输入
这是允许的吗???是否可以改变使用流的方式。
答案 0 :(得分:1)
是的,你可以这样做。
唯一棘手的部分取决于标题的结构。如果您必须读取标题的末尾以确定其结束位置,则需要能够在流中备份一些位,以便CipherInputStream
可以读取所有加密数据。另一方面,如果您的标题具有固定长度,或者它的长度编码,或者它具有某种结束标记,那么它应该非常简单:
try (InputStream is = new BufferedInputStream(Files.newInputStream(...))) {
Header header = Header.read(is);
CipherInputStream cis = new CipherInputstream(is, header.getCipherInstance());
cis.read(...);
}