Преобразование 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, который я храню в БД

но я хотел бы полностью избежать файловой системы и не создавать файл .zip. Я думаю, мне нужно напрямую преобразовать ZipOutputStream в FileInputStream, но я не смог найти способ сделать это.

есть ли простой способ сделать это?

  • у меня также есть такая же проблема, когда я извлекаю файл, чтобы прочитать его, я должен создать 2 разных временных файла - file.zip и file.hex

person yaniv    schedule 09.05.2013    source источник


Ответы (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.
person AlexR    schedule 09.05.2013
comment
прошу прощения, но мне кажется что-то здесь не так - person yaniv; 09.05.2013
comment
не могли бы вы добавить код для преобразования массива байтов обратно в файл. кажется, у меня тоже с этим проблема :-), или даже лучше с FileInputStream, чтобы я мог прочитать его напрямую, большое спасибо - person yaniv; 09.05.2013
comment
@yaniv Решайся. Вы сказали, что вашей целью было «полностью избежать файловой системы и не создавать файл»? - person user207421; 10.05.2013
comment
моя цель проста, у меня есть файл, который нужен для моего программного обеспечения - person yaniv; 11.05.2013
comment
моя цель проста, у меня есть файл, который необходим для моего программного обеспечения, я хочу сохранить этот файл в виде zip-файла в базе данных, и когда программное обеспечение в нем нуждается, оно может взять его из базы данных и прочитать. может быть, я ошибаюсь в сохранении его в виде файла, и что я должен сделать, это сначала сохранить его в строку и сохранить саму строку в БД, но таким образом я не смогу заархивировать информацию, спасибо за вашу помощь, если вы может привести меня к решению - person yaniv; 11.05.2013
comment
@AlexR Спасибо. Я какое-то время гуглил, чтобы узнать, как заархивировать файл и вернуть его в виде массива байтов. Ваше предложение помогло. Единственное изменение, которое у меня есть, это то, что я использовал zipBytes.toByteArray() вместо getBytes(). Я в Java6. - person SyAu; 22.01.2016