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