我有一个代码,它接受一个文件,压缩它,并将其存储在数据库中
看起来像这样
// 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/