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?
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% ObjectOutputStream.writeObject()
handhabt richtig lange Zeichenfolgen (verifiziert durch Betrachten des Quellcodes). Schreiben Sie die Zeichenfolge auf diese Weise:
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.
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.
Tags und Links java dataoutputstream