java - 将 ZipOutputStream 转换为 FileInputStream

标签 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

最佳答案

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

关于java - 将 ZipOutputStream 转换为 FileInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16462798/

相关文章:

android - 向临时缓存文件android写入和读取位图时出错?

android - 我无法在 android 中显示本地存储中的图像

java - 为什么我的布局在横向模式下没有填满屏幕?

java - 软件如何引用硬盘上的文件

c++ - 为了理解 I/O 完成端口,我需要知道什么?

android - Android 中的 FileInputStream NullPointerException

java - Android MediaPlayer 未调用注册的监听器

java - writeInt(Integer) 覆盖零

python - Python 是否支持零拷贝 I/O?

haskell - 可以在 Haskell 中以纯代码读取文件吗?