因此,我基本上正在开发一个桌面应用程序,在其中您提供了一个文件,并以压缩字符串格式将其压缩并将其还给您。我的意思是我读取文件的字节,压缩这些字节,然后基本上将它们转换为RAW .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}一样,我想将它们和四个组合在一起。这不是那么有用,但是随着数组的抬高,压缩算法可以帮助减少数组的长度。
,因为我现在知道这个问题是无关紧要的。我想要的是一种压缩数据的方法,因为我的内存无法处理。但是现在我意识到,我应该做的不是块中阅读该文件,因此我是否压缩它都没关系。这就是这样做的方法:
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)
。希望这对某人有帮助:(