Java 如何暂存文件进行压缩

Java 如何暂存文件进行压缩,java,compression,image-compression,data-compression,Java,Compression,Image Compression,Data Compression,我对编写自己的数据压缩库非常感兴趣。我所有的谷歌搜索结果都是人们说“只使用包含的Java库”的结果,这不是我想要的 例如,我编写了一个Java应用程序,它接收图像文件,对其进行数学压缩,然后将其写入文件。一旦我试图解压缩文件,我就无法查看图像。事实上,未压缩文件的大小略小于原始图像 所以,我的问题是,在整个压缩过程中保持数据完整性的正确方法是什么?比方说,我简单地求每个字节值的自然对数之和。当我获取最终值时,如何确保在反转过程中不会丢失任何数据?您可能需要对有损压缩算法和无损压缩算法进行一些研究

我对编写自己的数据压缩库非常感兴趣。我所有的谷歌搜索结果都是人们说“只使用包含的Java库”的结果,这不是我想要的

例如,我编写了一个Java应用程序,它接收图像文件,对其进行数学压缩,然后将其写入文件。一旦我试图解压缩文件,我就无法查看图像。事实上,未压缩文件的大小略小于原始图像


所以,我的问题是,在整个压缩过程中保持数据完整性的正确方法是什么?比方说,我简单地求每个字节值的自然对数之和。当我获取最终值时,如何确保在反转过程中不会丢失任何数据?

您可能需要对有损压缩算法和无损压缩算法进行一些研究。无损算法总是还原完全相同的文件。有损压缩(JPEG格式使用此选项)的结果“足够好”。感谢您的快速响应!我知道两者的区别。我知道lossy会使文件本身变小,因为它们要么量化数据集,要么删除不必要的数据。然而,我只是对每个字节执行了一个可逆的数学函数,然后将其反转,但文件仍然损坏。因此,在压缩/解压缩过程中的某个地方,我丢失了数据,我无法理解它是如何发生的。我建议进行一些单元测试,并尝试使用非常小的数据大小。压缩通常是一种全有或全无的无损压缩,因此在它运行时,您不必关心完整性,因为您已经知道它工作正常。如果数据以不可靠的方式(即网络)传递,则完整性校验和可能很有用,但否则,可以通过单元测试证明算法的完整性。使用有限精度数据类型的数学函数通常不“可逆”。编写一个验证可逆性的单元测试,我希望你能发现你的问题。谢谢你的建议!我将继续为一个小数据集构建一个单元测试。我会给你回复结果的。