用JAVA压缩文件

用JAVA压缩文件,java,file-comparison,Java,File Comparison,我的项目要求我必须通过REST服务(使用jersey)接收文件并将其存储在数据库中 文件大小约为2-4MB 收到的文件可以是zip或pdf格式。 在存储到数据库之前,我想压缩它 我在谷歌上搜索发现有很多可用的类,比如GZip、Zip、Deflater。。。我考虑使用Deflater,因为它看起来非常简单 如果我使用上面的代码,有人能为我的用例提供建议吗?这很好,还是我必须使用其他类来执行相同的操作 谢谢, KittyByteArrayOutputStream将压缩输出缓存在内存中。在编写大文

我的项目要求我必须通过REST服务(使用jersey)接收文件并将其存储在数据库中

文件大小约为2-4MB

收到的文件可以是zip或pdf格式。 在存储到数据库之前,我想压缩它

我在谷歌上搜索发现有很多可用的类,比如GZip、Zip、Deflater。。。我考虑使用Deflater,因为它看起来非常简单



如果我使用上面的代码,有人能为我的用例提供建议吗?这很好,还是我必须使用其他类来执行相同的操作

谢谢,
Kitty

ByteArrayOutputStream将压缩输出缓存在内存中。在编写大文件时,您必须将其包装在FileOutputStream中,以避免任何OOM问题。

所以您的代码无法实现您的目标?有什么问题吗?如果该文件已经是zip文件,则不太可能进一步压缩。即使它是可压缩的,您希望使用什么格式将其存储在数据库中?这应该决定你写什么代码,而不是反过来。ZIP和PDF已经被压缩。这不是一个代码审查网站。
Deflater deflater = new Deflater();
deflater.setInput(data);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
deflater.finish();
byte[] buffer = new byte[1024];
while (!deflater.finished()) {
    int count = deflater.deflate(buffer);
    outputStream.write(buffer, 0, count);
}
outputStream.close();
byte[] output = outputStream.toByteArray();
byte[] output = outputStream.toByteArray();