java如何使用DeflaterOutputStream压缩大型文件?
我看不出我的代码有任何错误,但每当我检查目标位置中压缩文件的大小时,我只看到文件大小只减少了2或3KB,这对于扩展到650MB左右的大文件来说太小了
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");
}
提前谢谢
# 1 楼答案
您将无法压缩MP4文件。MP4文件格式通常自行进行压缩,因此通用(无损)压缩器不需要消除冗余
尝试使用命令行压缩实用程序压缩同一个文件。我预测你也会在那里得到最小的压缩
对(已经)压缩的音频/视频文件进行进一步压缩的唯一方法是使用该格式的编解码器进行解压缩,然后以较低的质量重新压缩。显然,这样做会牺牲音频/视频质量