如何壓縮 String ?? |
答題得分者是:wameng
|
小蚊子
中階會員 發表:55 回覆:267 積分:94 註冊:2002-06-08 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
小蚊子
中階會員 發表:55 回覆:267 積分:94 註冊:2002-06-08 發送簡訊給我 |
引言: 可用Delphi 內附的ZLib。 內容較大,建議使用 BLOB 欄位型態。 因為壓縮的內容,在有些資料庫上可能會產生亂碼。 另外使用 Tstream 方式讀寫,效率上也會比較高。 參考參考! Procedure ZlibCompress(instream,outStream:TStream); var cps:TCompressionStream; begin inStream.Position:=0; cps := TCompressionStream.Create(clFastest,OutStream); try cps.CopyFrom(inStream,0); finally cps.Free; end; end;在以前的文章中,有找到 有關 ZLIB 的壓縮範例 問題是,假設我壓縮前是用 STRING 傳入,壓縮後也是要用 STRING 傳出 instream ==> EDIT1.TEXT outStream ==> EDIT2.TEXT Stream 與 String 如何轉換(我對 Stream 的觀念蠻生疏的) 還是我的思考方向錯誤,有其他做法?? 真的不解?? 謝謝您 發表人 - 小蚊子 於 2005/04/03 02:30:29 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
以下是使用 String 方式,實現壓縮及解壓縮。
var S1,S2,S3 : Pointer; {S1 ->加密 -> S2 -> 解密 -> S3} Blen :integer; Zlen:integer; procedure TForm1.Button1Click(Sender: TObject); begin Blen :=Length(Edit1.text); Label1.caption:=inttostr(Blen); GetMEM(S1,Blen); Try StrCopy(S1,PChar(Edit1.text)); GetMEM(S2,Blen); {不釋放 S2 } CompressBuf(S1,Blen,S2,zLen); Edit2.Text := PChar(S2); finally Freemem(S1); end; end; procedure TForm1.Button2Click(Sender: TObject); begin GetMEM(S3,Blen); Try DeCompressBuf(S2,Zlen,Blen,S3,Blen); Edit3.Text := PChar(S3); finally FreeMem(S3); FreeMem(S2); end; end;參考一下!亂寫的。請自行改為函數化吧! |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
可以考虑用 TStringStream。 另外,TStream和String还可以这样互相转换:
var S:string; Stream:TMemoryStream; begin Stream:=TMemoryStream.Create; try Stream.LoadFromFile('xxxx.txt'); SetLength(S,STream.Size); Stream.Position:=0; Stream.Read(S[1],Stream.Size); //这样把Stream里的内容放进S Memo1.Lines.Add(S); S:='123456789'; Stream.Position:=0; //先确定要从哪里开始放S Stream.Write(S[1],Length(S)); //这样把S的内容放进Stream finally Stream.Free; end; end; |
SamSam1230
中階會員 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
SamSam1230
中階會員 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |