2013-05-09 445 views
1

我有一个代码,需要一个文件,压缩它,并将其存储在数据库中转换ZipOutputStream来的FileInputStream

看起来像这样

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

回答

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. 
+0

我很抱歉,但我似乎在这里 – yaniv 2013-05-09 14:46:32

+0

丢失的财产以后,你可以请添加代码的字节数组转换回文件。我似乎也有这个问题:-),或者甚至更好的FileInputStream,这样我就可以直接读取它,非常感谢 – yaniv 2013-05-09 15:18:17

+0

@yaniv决定你的想法。你说你的目标是'完全避免文件系统并且不创建文件'? – EJP 2013-05-10 01:32:18