当前位置: 首页 > 知识库问答 >
问题:

使用流来解密和解压缩以限制内存使用?

斜博超
2023-03-14

我有一个非常大的压缩文件,2.5GB,是加密的。我无法将整个文件解密到内存中,并在那里解压缩以进行生产。所以我试图使用流来限制内存的使用量。

为了做到这一点,我已经连接了以下内容(为了清晰起见,忽略了错误处理和流关闭):

SecretKeySpec keySpec = new SecretKeySpec(myKey "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

FileInputStream fis = new FileInputStream(new File(pathToEncryptedFile));
CipherInputStream cis = new CipherInputStream(fis, cipher);

ZipInputStream zis = new ZipInputStream(new BufferedInputStream(cis));
ZipEntry ze = null;
while ((ze = zis.getNextEntry()) != null) {
    String filename = ze.getName();
    System.out.println("Found zip entry: " + filename);
}
java.util.zip.ZipException: unknown format (EXTSIG=f23f1090)
  at java.util.zip.ZipInputStream.readAndVerifyDataDescriptor(ZipInputStream.java:196)
  ...

共有1个答案

赫连瀚
2023-03-14

对解密文件使用ZipInputStream而不将其读入内存。如果失败了,您的文件无论如何都无法读取,需要重新创建(可能是有点不标准)。如果成功,则写出解密流的结果(在将其传递给ZipInputStream之前)并检查二进制差异。

 类似资料:
  • 问题内容: Gzip格式文件(gzip例如,使用程序创建的文件)使用“放气”压缩算法,该压缩算法与zlib使用的压缩算法相同。但是,使用zlib膨胀gzip压缩文件时,该库将返回Z_DATA_ERROR。 如何使用zlib解压缩gzip文件? 问题答案: python zlib库支持: RFC 1950(zlib压缩格式) RFC 1951(deflate压缩格式) RFC 1952(gzip压缩

  • 问题内容: 我知道这是一项容易的任务,但是更改代码后它停止工作,并且无法恢复!我实际上使用了两个函数来进行压缩和解压缩,尽管实际上它是“ jar”和“ unjar”,但这并没有太大的区别 任何帮助/建议吗? 创建JarFile时发生错误: 问题答案: 我不知道这是否是您的问题,但是通常最好在完成写入后关闭每个zip条目。 请参阅。 在显示的代码中,不会关闭邮政编码中的最后一个条目。您也不会显示关闭

  • 问题内容: 有人可以向我解释zlib库在Nodejs中如何工作吗? 我对Node.js很陌生,还不确定如何使用缓冲区和流。 我的简单情况是一个字符串变量,我想将字符串压缩或解压缩(压缩或膨胀,gzip或gunzip等)到另一个字符串。 即(我希望它如何工作) 感谢您的帮助:) 问题答案: 更新 :没意识到在节点0.5中有一个新的内置“ zlib”模块。我在下面的答案是针对第三方node- zlib

  • 本文向大家介绍C#中使用WinRAR实现加密压缩及解压缩文件,包括了C#中使用WinRAR实现加密压缩及解压缩文件的使用技巧和注意事项,需要的朋友参考一下 本次示例主要实现: 1.压缩文件夹及其下文件 2.压缩文件夹下文件 3.压缩文件夹及其下文件为rar 还是 zip 4.解压缩 5.加密压缩及解加密压缩 ----------- 示例代码如下: # re: C# (加密)压缩及解压缩 相关文件夹

  • 问题内容: Groovy中是否有内置支持来处理Zip文件(采用groovy方式)? 还是我必须使用Java的java.util.zip.ZipFile来处理Groovy中的Zip文件? 问题答案: AFAIK,没有本机的方法。但是请查看本文,了解如何向File 添加方法,这与您要查找的内容非常接近。您只需要制定一个方法。