将ZipOutputStream转换为FileInputStream

时间:2013-05-09 13:19:04

标签: java io fileinputstream zipoutputstream

我有一个代码,它接受一个文件,压缩它,并将其存储在数据库中

看起来像这样

          // 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

1 个答案:

答案 0 :(得分:7)

您根本不必创建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.