2013-05-09 49 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