我要将一个字符串压缩后存储在SQL的数据库里面!当存储成功过后!再次提出数据好像少了一些不可见的字符。请问怎么解决。
以下为压缩和解压缩的的两个函数:
function TForm1.CompressString(const S: string): string;
var
InputStream: TCompressionStream;
OutputStream: TMemoryStream;
Size, i: Integer;
begin
OutputStream := TMemoryStream.Create;
try
InputStream := TCompressionStream.Create(clMax, OutputStream);
try
Size := Length(S);
InputStream.Write(s[1], Size)
finally
InputStream.Free;
end;
SetLength(Result, OutputStream.Size);
OutputStream.Seek(0, soFromBeginning);
OutputStream.Read(Result[1], Length(Result))
finally
OutputStream.Free;
end
end;function TForm1.DecompressString(const S: string): string;
var
InputStream: TMemoryStream;
OutputStream: TDecompressionStream;
Size: Integer;
begin
InputStream := TMemoryStream.Create;
try
InputStream.Write(S[1], Length(S));
InputStream.Seek(0, soFromBeginning);
OutputStream := TDecompressionStream.Create(InputStream);
try
SetLength(Result, Size);
OutputStream.Read(Result[1], Size)
finally
OutputStream.Free
end
finally
InputStream.Free
end;
end;
以下为压缩和解压缩的的两个函数:
function TForm1.CompressString(const S: string): string;
var
InputStream: TCompressionStream;
OutputStream: TMemoryStream;
Size, i: Integer;
begin
OutputStream := TMemoryStream.Create;
try
InputStream := TCompressionStream.Create(clMax, OutputStream);
try
Size := Length(S);
InputStream.Write(s[1], Size)
finally
InputStream.Free;
end;
SetLength(Result, OutputStream.Size);
OutputStream.Seek(0, soFromBeginning);
OutputStream.Read(Result[1], Length(Result))
finally
OutputStream.Free;
end
end;function TForm1.DecompressString(const S: string): string;
var
InputStream: TMemoryStream;
OutputStream: TDecompressionStream;
Size: Integer;
begin
InputStream := TMemoryStream.Create;
try
InputStream.Write(S[1], Length(S));
InputStream.Seek(0, soFromBeginning);
OutputStream := TDecompressionStream.Create(InputStream);
try
SetLength(Result, Size);
OutputStream.Read(Result[1], Size)
finally
OutputStream.Free
end
finally
InputStream.Free
end;
end;
var
InputStream: TCompressionStream;
OutputStream: TMemoryStream;
Size, i: Integer;
begin
OutputStream := TMemoryStream.Create;
try
//要把原始大小写进去,不然TDecompressionStream无法得到原始大小
Size := Length(S);
OutputStream.Write(Size, SizeOf(Size));
InputStream := TCompressionStream.Create(clMax, OutputStream);
try
InputStream.Write(s[1], Size)
finally
InputStream.Free;
end;
SetLength(Result, OutputStream.Size);
OutputStream.Seek(0, soFromBeginning);
OutputStream.Read(Result[1], Length(Result))
finally
OutputStream.Free;
end
end;function TForm1.DecompressString(const S: string): string;
var
InputStream: TMemoryStream;
OutputStream: TDecompressionStream;
Size: Integer;
begin
InputStream := TMemoryStream.Create;
try
InputStream.Write(S[1], Length(S));
InputStream.Seek(0, soFromBeginning);
//读出原串大小,以备在TDecompressionStream中读取大小
InputStream.Read(Size, SizeOf(Size));
SetLength(Result, Size);
if Size <= 0 then
Exit; OutputStream := TDecompressionStream.Create(InputStream);
try
OutputStream.Read(Result[1], Size);
finally
OutputStream.Free
end
finally
InputStream.Free
end;
end;
InputStream.Seek(0, soFromBeginning);
//读出原串大小,以备在TDecompressionStream中读取大小
InputStream.Read(Size, SizeOf(Size));楼上的解法对的,你原来的程序没有先读原来的流的大小。压缩流前面几个字节是储存原来流大小的。