usoappacketcomuncompressor.~pas
来自「Delphi开发webservice的一套例子」· ~PAS 代码 · 共 103 行
~PAS
103 行
unit uSoapPacketComUnCompressor;
interface
uses
SysUtils, Classes;
function XTToCompressSoapPacket(const spPacket: string): string;
function XTToUnCompressSoapPacket(const spPacket: string): string;
function XTCompressedSize(const spPacket: string): Integer;
implementation
uses Zlib, EncdDecd;
function XTToCompressSoapPacket(const spPacket: string): string;
var
msCompressed : TMemoryStream;
zlibCompressor : TCompressionStream;
ssData : TStringStream;
begin
msCompressed := TMemoryStream.Create;
ssData := TStringStream.create('');
try
zlibCompressor := TCompressionStream.Create(clDefault,
msCompressed);
zlibCompressor.Write(spPacket[1], length(spPacket));
finally
FreeAndNil(zlibCompressor);
end;
try
msCompressed.Position := 0;
EncodeStream(msCompressed, ssData);
Result := sSData.Datastring;
finally
FreeAndNil(msCompressed);
FreeAndNil(ssData);
end;
end;
function XTToUnCompressSoapPacket(const spPacket: string): string;
var
msData : TMemoryStream;
msEncoded : TMemoryStream;
zlibUnCompressor : TDeCompressionStream;
fBufLen : integer;
fBuffer : array[0..16383] of byte;
begin
msData := TMemoryStream.create;
msEncoded := TMemoryStream.create;
try
msData.size := length(spPacket);
move(spPacket[1], msData.memory^, msData.size);
msData.position := 0;
DecodeStream(msData, msEncoded);
msData.size := 0;
msEncoded.position := 0;
zlibUnCompressor := TDeCompressionStream.create(msEncoded);
try
fBufLen := zlibUnCompressor.Read(fBuffer, SizeOf(fBuffer));
while fBufLen > 0 do
begin
msData.Write(fBuffer, fBufLen);
fBufLen := zlibUnCompressor.Read(fBuffer, SizeOf(fBuffer));
end;
finally
FreeAndNil(zlibUnCompressor);
end;
msData.position := 0;
SetLength(Result, msData.size);
move(msData.memory^, Result[1], msData.size);
finally
FreeAndnil(msEncoded);
FreeAndNil(msData);
end;
end;
function XTCompressedSize(const spPacket: string): Integer;
var
msCompressed : TMemoryStream;
zlibCompressor : TCompressionStream;
begin
msCompressed := TMemoryStream.Create;
try
zlibCompressor := TCompressionStream.Create(clDefault,
msCompressed);
zlibCompressor.Write(spPacket[1], length(spPacket));
finally
FreeAndNil(zlibCompressor);
end;
try
msCompressed.Position := 0;
Result := msCompressed.Size;
finally
FreeAndNil(msCompressed);
FreeAndNil(ssData);
end;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?