Java 如何使用DeflaterOutputStream压缩大型文件?
我看不出我的代码有任何错误,但每当我检查目标位置中压缩文件的大小时,我只看到文件大小只减少了2或3KB,这对于扩展到650MB左右的大文件来说太小了Java 如何使用DeflaterOutputStream压缩大型文件?,java,compression,deflate,Java,Compression,Deflate,我看不出我的代码有任何错误,但每当我检查目标位置中压缩文件的大小时,我只看到文件大小只减少了2或3KB,这对于扩展到650MB左右的大文件来说太小了 public static void main(String[] args) throws Exception { FileInputStream fin = new FileInputStream("filetobecompressed.mp4"); FileOutputStream fout = new FileOutp
public static void main(String[] args) throws Exception
{
FileInputStream fin = new FileInputStream("filetobecompressed.mp4");
FileOutputStream fout = new FileOutputStream("compressedfile.mp4");
DeflaterOutputStream dout = new DeflaterOutputStream(fout);
byte b[] = new byte[8192];
int r;
float tracker = 0;
while((r=fin.read(b))!=-1)
{
dout.write(b,0,r);
dout.flush();
tracker += (float)r/1000000f;
System.out.println(tracker + "MB compressed");
}
dout.finish();
fin.close();
fout.close();
dout.close();
System.out.println("Compression successful");
}
提前感谢。您将无法压缩MP4文件。MP4文件格式通常自行进行压缩,因此一般(无损)压缩器无法消除冗余 尝试使用命令行压缩实用程序压缩同一文件。我预测你也会在那里得到最小的压缩
对(已经)压缩的音频/视频文件进行进一步压缩的唯一方法是使用该格式的编解码器进行解压缩,然后以较低的质量重新压缩。显然,这样做会牺牲音频/视频质量。您将无法压缩MP4文件。MP4文件格式通常自行进行压缩,因此一般(无损)压缩器无法消除冗余 尝试使用命令行压缩实用程序压缩同一文件。我预测你也会在那里得到最小的压缩
对(已经)压缩的音频/视频文件进行进一步压缩的唯一方法是使用该格式的编解码器进行解压缩,然后以较低的质量重新压缩。显然,这样做会牺牲音频/视频质量。顺便说一句,每次调用
flush()
时,都会使用压缩文件添加一些数据。每次调用flush()。它得出了一个结论,它在这一点上正在进行的任何工作。