Stream 解壓縮至 Stream 如何實作(標準 Zip 格式)? |
缺席
|
gavinhu
一般會員 發表:3 回覆:4 積分:1 註冊:2003-06-18 發送簡訊給我 |
請問各位先進,
我目前是使用 TZipMaster 來作 Stream 的解壓縮
(壓縮字串是用標準的 Zip 格式),我是使用以下的程式解壓縮
procedure DeCompress(sInput: string; iDataSize:Integer);
var
Data, Buffer: array of Char;
tmp: TMemoryStream;
Stream: TZipstream;
i,iSize: Integer;
Str: string;
begin
tmp := TMemoryStream.Create; iSize := length(sInput); // 壓縮字串長度
GetMem(Buffer,iSize);
GetMem(Data,iDataSize); // iDataSize 是解壓縮的字串長度
for i:=0 to iSize-1 do Buffer[i] := sInput[i+1]; // 解壓縮
tmp.WriteBuffer(Buffer,iSize);
tmp.Seek(0,soFromBeginning);
ZipMaster1.ExtractStreamToStream(tmp,iDataSize); FreeMem(Buffer);
FreeMem(Data);
tmp.free;
end;
資料來源是由 Java 壓縮字串後透過網路從 TClientSocket.OnRead 中的
Socket.ReceiveText 所取得,
我發覺使用此方式總是無法成功地解壓縮,所以想請教大家是否有可行的
方式解決此問題!
謝謝大家的幫忙! 發表人 -
|
mustapha.wang
資深會員 發表:89 回覆:409 積分:274 註冊:2002-03-13 發送簡訊給我 |
|
gavinhu
一般會員 發表:3 回覆:4 積分:1 註冊:2003-06-18 發送簡訊給我 |
引言: 1.作为解压函数,你的函数没有输出,是否在ZipMaster1里?; 2.没有必要使用Buffer,直接写tmp.Write(sInput[1],length(sInput)); 3.ZipMaster1.ExtractStreamToStream函数的第一参数是输入还是输出? 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听謝謝您在幫我解決問題, 我的函數輸出是在 ZipMaster1.ZipStream 中! ZipMaster.ExtractStreamToStream 的第一個參數是要解壓縮的資料來源, 所以第一個參數是輸入參數! 我之所以採用 TZipMaster 來作解壓縮物件主要是因為它壓縮的格式是標準的 Zip 格式,而我所接收的資料正是由 Java 所壓縮出來標準的 Zip 格式資料, 再加上 TZipMaster 又支援 Stream 解壓縮,所以才採用此元件! 雖然我用 TZipMaster 到現在都無法對 Stream 解壓縮成功! 不過我回頭又試了 ZLibEx 的解壓縮,我竟然發現它能夠將 Java 所壓縮出來 的 Stream 解壓縮,因為 ZLibEx 並沒有說明它的壓縮格式是標準的 Zip 格式 ,所以一開始並沒有使用它,如今被我試出來了,真是謝天謝地! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |