我在Delphi XE和我有一些问题与ZLib例程...
我正在尝试压缩一些字符串(并对其进行编码,以便通过SOAP webservice发送它--这并不重要--)
该字符串来自ZDecompressString中使用的不同的ZcompressString。
uses ZLib;
// compressing string
// ZCompressString('1234567890', zcMax);
// compressed string ='xÚ3426153·°4'
// Uncompressing the result of ZCompressString, don't return the same:
// ZDecompressString('xÚ3426153·°4');
// uncompressed string = '123456789'
if '1234567890' <> ZDecompressString(ZCompressString('1234567890', zcMax)) then
ShowMessage('Compression/Decompression fails');
Uses ZLib;
// compressing string
// ZCompressString('12345678901234567890', zcMax)
// compressed string ='xÚ3426153·°40„³'
// Uncompressing the result of ZCompressString, don't return the same:
// ZDecompressString('xÚ3426153·°40„³')
// uncompressed string = '12345678901'
if '12345678901234567890' <> ZDecompressString(ZCompressString('12345678901234567890', zcMax)) then
ShowMessage('Compression/Decompression fails');
function TForm1.ZCompressString(aText: string; aCompressionLevel: TZCompressionLevel): string;
var
strInput,
strOutput: TStringStream;
Zipper: TZCompressionStream;
begin
Result:= '';
strInput:= TStringStream.Create(aText);
strOutput:= TStringStream.Create;
try
Zipper:= TZCompressionStream.Create(strOutput, aCompressionLevel);
try
Zipper.CopyFrom(strInput, strInput.Size);
finally
Zipper.Free;
end;
Result:= strOutput.DataString;
finally
strInput.Free;
strOutput.Free;
end;
end;
function TForm1.ZDecompressString(aText: string): string;
var
strInput,
strOutput: TStringStream;
Unzipper: TZDecompressionStream;
begin
Result:= '';
strInput:= TStringStream.Create(aText);
strOutput:= TStringStream.Create;
try
Unzipper:= TZDecompressionStream.Create(strInput);
try
strOutput.CopyFrom(Unzipper, Unzipper.Size);
finally
Unzipper.Free;
end;
Result:= strOutput.DataString;
finally
strInput.Free;
strOutput.Free;
end;
end;
其他人也有同样的问题??
ZLib和我所知道的所有压缩代码一样,是一种二进制压缩算法。它对字符串编码一无所知。您需要为它提供要压缩的字节流。当您解压缩时,您将返回字节流。
但是您使用的是字符串,因此需要在编码文本和字节流之间进行转换。TStringStream
类正在代码中完成这项工作。在创建字符串流实例时,为其提供文本编码。
只有您的代码不提供编码。因此使用默认的本地ANSI编码。这是第一个问题。这不是完整的Unicode编码。一旦使用本地ANSI代码以外的字符,链就会崩溃。
import "compress/zlib" zlib包实现了对zlib格式压缩数据的读写,参见RFC 1950。 本包的实现提供了在读取时解压和写入时压缩的滤镜。例如,将压缩数据写入一个bytes.Buffer: var b bytes.Buffer w := zlib.NewWriter(&b) w.Write([]byte("hello, world\n")) w.Close() 然后将数
zlib 软件包包含 zlib 库,很多程序中的压缩或者解压缩函数都会用到这个库。zlib 适用于数据压缩的函式库,几乎适用于任何计算器硬件和操作系统。 特性: 数据头(header) zlib 能使用一个 gzip 数据头、zlib 数据头或者不使用数据头压缩数据。 通常情况下,数据压缩使用 zlib 数据头,因为这提供错误数据检测。当数据不使用数据头写入时,结果是没有任何错误检测的原始 DEF
本节讲解 Linux 在搭建 LAMP 环境过程中对 zlib 和 libpng 源码包的安装。 安装zlib源码包 zlib 是提供数据压缩用的函数库,使用 DEFLATE 算法,最初是为 libpng 函数库所写的,后来普遍被许多软件所使用。此函数库为自由软件,使用 zlib 授权。 安装步骤如下: [root@localhost ~]# cd /usr/local/src/zlib-1.2.
处理内存中的数据 # zlib_memory.py import zlib import binascii original_data = b'This is the original text.' print('Original :', len(original_data), original_data) compressed = zlib.compress(original_dat
zlib-ng 是 zlib 的改进版,主要目的是提升性能。
Stability: 2 - Stable zlib 模块提供通过 Gzip 和 Deflate/Inflate 实现的压缩功能,可以通过这样使用它 const zlib = require('zlib'); 压缩或者解压数据流(例如一个文件)通过zlib流将源数据流传输到目标流中来完成。 const gzip = zlib.createGzip(); const fs = require('f