Große Zeichenketten mit DataOutputStream schreiben

7

Ich habe eine Socket-Programmierung gemacht, um Informationen über die Leitung zu übertragen. Ich bin auf ein Problem mit DataOutputStream.writeUTF () gestoßen. Es scheint Strings von bis zu 64k zu erlauben, aber ich habe ein paar Situationen, in denen ich darüber laufen kann. Gibt es gute Alternativen, die größere Saiten unterstützen, oder muss ich meine eigenen rollen?

    
Glen 07.11.2008, 00:29
quelle

3 Antworten

15

Es verwendet tatsächlich zwei Bytes, um die Länge der Zeichenfolge zu schreiben, bevor ein Algorithmus verwendet wird, der es in ein, zwei oder drei Bytes pro Zeichen komprimiert. (Siehe die Dokumentation zu java.io.DataOutput) Es liegt nahe an UTF-8, aber obwohl dies dokumentiert ist, gibt es Kompatibilitätsprobleme. Wenn Sie sich keine großen Gedanken über die Menge an Daten machen müssen, die Sie schreiben werden, können Sie einfach Ihre eigenen schreiben, indem Sie zuerst die Länge der Zeichenfolge und dann die Rohdaten der Zeichenfolge mit der Methode getBytes schreiben.

%Vor%     
kasperjj 07.11.2008, 00:59
quelle
7

ObjectOutputStream.writeObject() handhabt richtig lange Zeichenfolgen (verifiziert durch Betrachten des Quellcodes). Schreiben Sie die Zeichenfolge auf diese Weise:

%Vor%

Lesen Sie es so:

%Vor%

Ein weiterer Unterschied zu DataOutputStream besteht darin, dass die Verwendung von ObjectOutputStream bei der Instanziierung automatisch einen 4-Byte-Stream-Header schreibt, aber normalerweise eine ziemlich kleine Strafe ist.

    
ebruchez 31.01.2012 02:22
quelle
2

Sie sollten in der Lage sein, OutputStreamWriter mit der Option zu verwenden UTF-8-Codierung. Es gibt keine explizite writeUTF-Methode, aber Sie können den Zeichensatz im Konstruktor festlegen. Probieren Sie

aus %Vor%

Dabei steht out für den OutputStream, den Sie jetzt umbrechen.

    
Bill the Lizard 07.11.2008 00:54
quelle

Tags und Links