Es gibt eine seltsame Einschränkung in der Methode java.io.DataOutputStream.writeUTF(String str)
, die die Größe der codierten Zeichenfolge utf-8 auf 65535
bytes beschränkt:
Es ist seltsam, weil:
static int writeUTF(String str, DataOutput out)
dieser Klasse java.io.DataInputStream.readUTF()
. Nach oben kann ich den Zweck solcher Beschränkung in writeUTF
Methode nicht verstehen. Was habe ich vermisst oder missverstanden?
Das Javadoc von DataOutputStream.writeUTF
gibt Folgendes an:
Zuerst werden zwei Bytes in den Ausgabestream geschrieben, wie von der
writeShort
method gibt die Anzahl der zu folgenden Bytes an. Dieser Wert ist die Anzahl der tatsächlich geschriebenen Bytes, nicht die Länge des Zeichenfolge.
Zwei Bytes bedeuten 16 Bits: In 16 Bits kann die maximale Zahl, die eins kodiert werden kann, 2^16
== 65535 sein.
DataInputStream.readUTF
hat genau die gleiche Einschränkung , da es zuerst die Anzahl der zu konsumierenden UTF-8-Bytes in Form einer 2-Byte-Ganzzahl liest, die wiederum nur einen Maximalwert von 65535 haben kann.
writeUTF
schreibt zuerst zwei Bytes mit der Länge, die dasselbe Ergebnis haben wie das Aufrufen von writeShort
mit der Länge und dann das Schreiben der UTF-codierten Bytes. writeUTF
ruft nicht wirklich writeShort
auf - es erstellt eine einzelne byte[]
mit der 2-Byte-Länge und den UTF-Bytes. Aber deshalb sagt der Javadoc " als ob durch die writeShort
Methode" und nicht nur "durch die writeShort
Methode".
Tags und Links java restrictions dataoutputstream