如何在 C++ 中不解压缩地读取 xz 文件?

How can i read xz file without decompressing in c++?

我想有效地读取xz文件,所以我认为解压缩不是一个好的选择。

在 C++ 中有什么方法可以在不解压的情况下读取 xzfile 吗?

我知道 zlib 是读取 gz 文件的好工具,但它不能用于 xz 文件。

我发现我可以 vim xz 文件,显示效果不错。但是当我使用 cpp ifstream getline 时,它​​会出现乱码。 谁能解释一下?

xz 不是文本文件,它包含字节,而不是字符,所以你不能在上面使用标准输入流,你只剩下 fread。但是,xz 是开源的,所以如果您的工具也是开源的,您可以获取他们的代码并根据您的需要进行调整。

压缩是将一个字节序列转换为另一个字节序列的可逆过程,希望更短1。减压是该过程的逆过程。所以当然,如果你有一个已经压缩的字节序列,那么你必须解压缩它才能恢复内容。没有办法解决它,因此性能下降是不可避免的。所以

的答案

Is there any methods i can use to read xzfile without decompressing in c++?

简直就是“不”。 C++与否,无所谓。

至于

I found i can vim xz file, it shows good.

是的,因为 vim 会在后台为您解压缩文件(大概在内存中)。它只是没有告诉你。


1 有趣的事实:数学告诉我们,对于每一种压缩算法,都存在一个输入,这样算法实际上会产生更大的输出。压缩算法基于这样一个事实,即我们压缩的内容内部有一些很好的模式,例如字。这也是为什么多次应用压缩不起作用(并且永远不会)的原因。