为了账号安全,请及时绑定邮箱和手机立即绑定

数据压缩算法:压缩字符串

数据压缩算法:压缩字符串

拉风的咖菲猫 2023-02-23 17:44:20
所以,我基本上是在开发一个桌面应用程序,你可以在其中提供一个文件,它会压缩它并以压缩字符串格式返回给你。我的意思是我读取文件的字节,压缩这些字节,然后基本上将它们转换成原始 .txt 文件。转换过程很简单,我想知道的是如何压缩文件。我知道我想进行无损数据压缩,因为这就是我解压缩文件的方式,但我只是不知道要使用哪种压缩算法,或者我是否需要自己编写一些程序。例如:public String CompressFile(Bytes fileInformation[]) {   for(int i = 0; i < fileInformation; i++) {      if(fileInformation[i].equals(fileInformation[i + 1]) {        // Say that the file has two instances of the same byte than no need to         // include it twice or thrice.      }   }}上面是一个非常基本的例子。但我想要更复杂的东西,可以压缩文件,直到剩下的是真正的熵或随机性。不再压缩,这是尽可能随机的。从这些数据中,我可以解压缩文件并在用户向我提供压缩数据时将其呈现给用户。简而言之,我想使用一种高效、快速、有效且功能强大的压缩算法。提前致谢。编辑: 为了更好地表达这一点,我需要压缩或缩小文件包含的字符串或字节序列,而不是文件本身。这道题的重点是我想压缩一个int数组。就像我有一个数组 {1, 4, 5, 1, 4} 那么我想将一个和四个组合在一起。它不是那么有用,但是随着数组的扩大,压缩算法可以帮助大大减少数组的长度。
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

据我现在的理解,这个问题是无关紧要的。我想要的是一种压缩数据的方法,因为我的内存无法处理它。但现在我意识到,我应该做的不是那样,而是分块读取文件,所以压缩与否并不重要。这是怎么做的:


try {

    File file = new File("myFile");

    FileInputStream is = new FileInputStream(file);

    byte[] chunk = new byte[1024];

    int chunkLen = 0;

    while ((chunkLen = is.read(chunk)) != -1) {

        // your code..

    }

} catch (FileNotFoundException fnfE) {

    // file not found, handle case

} catch (IOException ioE) {

    // problem reading, handle case

}

至于压缩函数,如果有人想要的话,可以使用由tonyking97编写的这个很棒的LZW 压缩算法,基本上你必须将字节数组转换为字符串,然后通过这个压缩函数传递它。它可以工作,但是对于大字节数组来说速度很慢。

当然,为了再次写入文件,我们必须使用而FileOutputStream不是FileInputStream并说outputStream.write(byte[], int, int). 希望这会对某人有所帮助:)


查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信