【问题标题】:Convert ZipOutputStream to FileInputStream将 ZipOutputStream 转换为 FileInputStream
【发布时间】:2013-05-09 13:19:04
【问题描述】:

我有一个代码,它获取一个文件,压缩它,然后将它存储在数据库中

看起来像这样

          // STEP 1 - Create a ZIP file
          byte[] buffer = new byte[1024];// 18024
          ZipOutputStream outZip = new ZipOutputStream(new FileOutputStream("file.zip"));
          outZip.setLevel(Deflater.DEFAULT_COMPRESSION);
          FileInputStream in = new FileInputStream(c:\file.hex);
          outZip.putNextEntry(new ZipEntry("file.hex"));
          int len;
          while (( len = in.read(buffer)) > 0)
                outZip.write(buffer, 0, len);
          outZip.closeEntry();
          in.close();
          outZip.close();

          // STEP 2 - Insert zip file to DB
          file = new File("file.zip");
          FileInputStream fis = new FileInputStream( file );

我存储在数据库中的 fis 对象

但我想完全避免使用文件系统,而不是创建 file.zip。 我想我需要直接将 ZipOutputStream 转换为 FileInputStream 但我找不到办法。

有没有简单的方法可以做到这一点?

  • 我在提取文件时也遇到了同样的问题,为了读取它我必须创建 2 个不同的临时文件 - file.zip 和 file.hex

【问题讨论】:

    标签: java io fileinputstream zipoutputstream


    【解决方案1】:

    您根本不必创建FileOutputStream。请改用ByteArrayOutputStream

    ByteArrayOutputStream zipBytes = new ByteArrayOutputStream()
    ZipOutputStream outZip = new ZipOutputStream(zipBytes);
    
    // run your code that adds zip entries....
    
    zipBytes.getBytes() // returns array of bytes that contain your zipped information.
    

    【讨论】:

    • 对不起,我好像漏掉了什么
    • 能否请您添加代码以将字节数组转换回文件。我似乎也有这个问题:-),或者更好的是 FileInputStream,这样我就可以直接阅读它,非常感谢
    • @yaniv 下定决心。你说你的目标是'完全避免文件系统而不是创建文件'?
    • 我的目标很简单,我的软件需要一个文件
    • @AlexR 谢谢。我在谷歌上搜索了一段时间以了解如何压缩文件并以字节数组的形式返回。你的建议有帮助。我唯一的改变是,我使用了 zipBytes.toByteArray() 而不是 getBytes()。我在 Java6 中。
    猜你喜欢
    • 2013-12-11
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2013-07-09
    • 2015-02-11
    • 2015-07-20
    • 1970-01-01
    • 2011-03-27
    相关资源
    最近更新 更多