Hallo<br> weiß jemand, wie man mit den Indy 8.0 Base64 Komponenten einen Stream kodiert und/oder decodiert ?
Announcement
Collapse
No announcement yet.
Indy Base64
Collapse
X
-
Hi
Jo, das ist extrem langsam. Mein Delphi Encryption Compendium enthält auch Mime64, UU und XX konvertierungen. Folgender Code konvertiert eine 700Kb Datei auf'm langsamen Cyrix M2 233MHz 64Mb Win95 in 100 Millisekunden.
<pre>
uses DECUtil;<br>
procedure Test64;
var
Buffer: array[0..1024 * 3 -1] of Char;
// muss durch 3 teilbar sein, der MIME String ist dann 4096 Zeichen lang
S,D: TFileStream;
I: Integer;
M: String;
begin
S := TFileStream.Create('D:\test.bin', fmOpenRead);
D := TFileStream.Create('D:\test.mime', fmCreate);
try
repeat
I := S.Read(Buffer, SizeOf(Buffer));
if I = 0 then Break;
M := StrToFormat(@Buffer, I, fmtMIME64);
M := InsertBlocks(M, '', #13#10, 64); // alle 64 Zeichen ein CR
D.Write(PChar(M)^, Length(M));
until False;
finally
D.Free;
S.Free;
end;
end;
</pre>
Gruß Hage
Comment
-
Der base64 code der JCL arbeitet mit dem gleichen Algorithmus wie der INDY coder. Der im DEC ist anders codiert, sollte aber eigentlich langsammer sein da er ein Table-Lookup nutzt. Dafür gewinnt man aber höhere Flexibilität da der zeichensatz ausgetausch werden kann. Zusätzlich ist die "anfälligkeit" beim Rückkonvertieren geringer. Heist der DEC Coder kann formatierten MIME64 Text direkt konvertieren da er die Separatorzeichen überspringt. Bei gößeren Datenmengen ist der DEC Coder aber wieder schneller da der Code für 4 Zeichen Output in Registern mit schnelleren Operationen erzeugt wird. Der INDY/JCL Code benutzt dafür zeitraubende Speicheroperationen.
Gruß Hage
Comment
Comment