|
| Komprimering med Delphi og Java Fra : NB |
Dato : 07-06-04 16:10 |
|
Er der nogen som kender til en komprimeringsrutine som virker med både
Delphi og Java? Mit problem er, at jeg skal komprimere noget tekst (XML-
dokument) med Delphi og dernæst udpakke det med Java.
Jeg har kigget lidt på ZLib som findes til Delphi og der skulle være
understøttelse for filer pakket med ZLib i java.util.zip-pakken. Jeg kan
bare ikke overskue hvilken kode der skal til for, at min Java- og
Delphi-rutine bliver kompatible. Er der nogen som kan hjælpe mig på vej?
/Niels
| |
Stig Johansen (08-06-2004)
| Kommentar Fra : Stig Johansen |
Dato : 08-06-04 04:45 |
|
NB wrote:
> Er der nogen som kender til en komprimeringsrutine som virker med både
> Delphi og Java? Mit problem er, at jeg skal komprimere noget tekst (XML-
> dokument) med Delphi og dernæst udpakke det med Java.
>
> Jeg har kigget lidt på ZLib som findes til Delphi og der skulle være
> understøttelse for filer pakket med ZLib i java.util.zip-pakken. Jeg kan
> bare ikke overskue hvilken kode der skal til for, at min Java- og
> Delphi-rutine bliver kompatible. Er der nogen som kan hjælpe mig på vej?
Her er en lille unit, jeg bruger i forbindelse med XML/SOAP.
Hvis du evt. får brug for deflate/gzip, så giv et praj.
unit CompressU;
interface
uses
Types,Classes;
FUNCTION StringToCompressed ( Input : STRING ) : TByteDynArray ;
FUNCTION CompressedToString ( Input : TByteDynArray ) : STRING ;
FUNCTION StringToCompressedStream ( Input : STRING ) : TMemoryStream ;
implementation
uses
SysUtils,
ZLib;// Ex ;
FUNCTION StringToCompressed ( Input : STRING ) : TByteDynArray ;
VAR
CompressionStream : TCompressionStream ;
ResultStream : TMemoryStream ;
BEGIN
ResultStream := TMemoryStream.Create ;
CompressionStream := TCompressionStream.Create(clMax,ResultStream) ;
try
CompressionStream.Write(Input[1],Length(Input));
CompressionStream.Free ;
SetLength(Result,ResultStream.Size);
ResultStream.Position := 0 ;
ResultStream.Read(Result[0],ResultStream.Size);
FINALLY
ResultStream.Free ;
END;
END;
FUNCTION StringToCompressedStream ( Input : STRING ) : TMemoryStream ;
VAR
CompressionStream : TCompressionStream ;
BEGIN
Result := TMemoryStream.Create ;
CompressionStream := TCompressionStream.Create(clMax,Result) ;
try
CompressionStream.Write(Input[1],Length(Input));
CompressionStream.Free ;
Result.Position := 0 ;
FINALLY
END;
END;
FUNCTION CompressedToString ( Input : TByteDynArray ) : STRING ;
VAR
DeCompressionStream : TDeCompressionStream ;
ResultStream : TMemoryStream ;
Buffer : Array [1..8192] of BYTE ;
RLength : INTEGER ;
PrevLength : INTEGER ;
BEGIN
ResultStream := TMemoryStream.Create ;
ResultStream.Write(Input[0],Length(Input));
ResultStream.Position := 0 ;
DeCompressionStream := TDeCompressionStream.Create(ResultStream) ;
Result := '';
REPEAT
TRY
RLength := DeCompressionStream.Read(Buffer,Sizeof(Buffer));
IF RLength > 0 THEN BEGIN
PrevLength := Length(Result);
SetLength(Result,PrevLength+RLength);
Move(Buffer,Result[PrevLength+1],RLength);
END;
EXCEPT ON E:EXCEPTION DO BEGIN
RLength := 0 ;
writeln('Error reading compressionstream '+E.Message );
END;
END;
UNTIL RLength <= 0 ;
DeCompressionStream.Free ;
ResultStream.Free ;
END;
end.
--
Med venlig hilsen
Stig Johansen
| |
NB (09-06-2004)
| Kommentar Fra : NB |
Dato : 09-06-04 18:44 |
|
In article <40c536eb$0$3056$14726298@news.sunsite.dk>, Stig Johansen
<stig_johansen_it_at_=(@)hotmail.com> says...
> Hvis du evt. får brug for deflate/gzip, så giv et praj.
Jeg ville være meget taknemmelig hvis du gad at poste koden til
deflate/inflate, da det egentlig er disse rutiner jeg er mest
interesseret i, men ikke har kunne finde noget brugbart. På forhånd tak..
| |
NB (09-06-2004)
| Kommentar Fra : NB |
Dato : 09-06-04 20:24 |
|
In article <40c536eb$0$3056$14726298@news.sunsite.dk>, Stig Johansen
<stig_johansen_it_at_=(@)hotmail.com> says...
> Hvis du evt. får brug for deflate/gzip, så giv et praj.
Jeg ville være meget taknemmelig hvis du gad at poste koden til
deflate/inflate, da det egentlig er disse rutiner jeg er mest
interesseret i, men ikke har kunne finde noget brugbart. På forhånd tak..
| |
Stig Johansen (10-06-2004)
| Kommentar Fra : Stig Johansen |
Dato : 10-06-04 05:25 |
|
NB wrote:
> In article <40c536eb$0$3056$14726298@news.sunsite.dk>, Stig Johansen
> <stig_johansen_it_at_=(@)hotmail.com> says...
>
>> Hvis du evt. får brug for deflate/gzip, så giv et praj.
>
> Jeg ville være meget taknemmelig hvis du gad at poste koden til
> deflate/inflate, da det egentlig er disse rutiner jeg er mest
> interesseret i, men ikke har kunne finde noget brugbart. På forhånd tak.
For deflate til *browsere*, bruger jeg 'ZSendToBrowser' fra ZlibEx:
< http://www.dellapasqua.com/delphizlib/>
Jeg mener, at zlib derudover er std. deflate/inflate.
Har du testet?
--
Med venlig hilsen
Stig Johansen
| |
Thorbjoern Ravn Ande~ (08-06-2004)
| Kommentar Fra : Thorbjoern Ravn Ande~ |
Dato : 08-06-04 07:37 |
|
NB <nej@tak.dk> writes:
> Jeg har kigget lidt på ZLib som findes til Delphi og der skulle være
> understøttelse for filer pakket med ZLib i java.util.zip-pakken. Jeg kan
> bare ikke overskue hvilken kode der skal til for, at min Java- og
> Delphi-rutine bliver kompatible. Er der nogen som kan hjælpe mig på vej?
ZLib er samme rutine som der findes i programmet "gzip". Hvis du har
som mål at arbejde med noget som gzip accepterer, skulle du være
kørende.
Altså, skrive Delphi som gzip kan acceptere (gzip -t), og java som kan
spise en minfil.gz.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn
| |
|
|