数据压缩算法:压缩字节

时间:2019-06-29 22:11:35

标签: java file security compression

因此,我基本上是在开发一个桌面应用程序,您在其中提供文件并对其进行压缩,然后以压缩字符串格式将其返回给您。我的意思是,我读取文件的字节,压缩这些字节,然后基本上将它们转换为原始的.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 个答案:

答案 0 :(得分:0)

据我所知,这个问题是无关紧要的。我想要的是一种压缩数据的方法,因为我的内存无法处理它。但是现在我意识到,代替应该执行的工作是分块读取文件,因此无论是否压缩它都没有关系。这就是方法:

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
}

对于压缩函数,如果有人想使用LZW Compression编写的出色的tonyking97算法,则基本上必须将字节数组转换为字符串,然后将其通过此压缩函数。它可以工作,但是使用大字节数组时速度很慢。

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