Announcement

Collapse
No announcement yet.

Indy Base64

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Indy Base64

    Hallo<br> weiß jemand, wie man mit den Indy 8.0 Base64 Komponenten einen Stream kodiert und/oder decodiert ?

  • #2
    Auf der Entwicklerkonferenz habe ich gehoert (direkt vom Indy-Entwickler) das Base64 bei Indy 8.0 Bugs hat.<br>
    Loesung: Indy 9.0 besorgen.<br>
    http://www.nevrona.com/Indy wenn ich mich recht entsinne

    Comment


    • #3
      Moin Robert,<br> habe die Indy 9 Version. <br>Kann es sein, das der Coder ziemlich langsam ist?<br>Eine 700kByte exe zu codieren benötigt auf meinem PIII/750Mhz/256MB/Win2k ca 10 Minuten.<br>Jens Schuman

      Comment


      • #4
        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


        • #5
          Übrigens, eine 3.8 Mb große Datei wird in 600 ms konvertiert.

          Gruß Hage

          Comment


          • #6
            Base64 Encoder gibt es viele z. B. in der Jedi Code Library.<br>
            Koenntet ihr mal einen Vergleich machen

            Comment


            • #7
              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

              Working...
              X