DataOutputStream: Zweck der Einschränkung "codierte Zeichenfolge zu lang"

9

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:

%Vor%

Es ist seltsam, weil:

  1. es gibt keine Erwähnung über diese Einschränkung in JavaDoc dieser Methode
  2. Diese Einschränkung kann leicht gelöst werden, indem die interne Methode static int writeUTF(String str, DataOutput out) dieser Klasse
  3. kopiert und modyfing wird
  4. es gibt keine solche Einschränkung in der gegensätzlichen Methode java.io.DataInputStream.readUTF() .

Nach oben kann ich den Zweck solcher Beschränkung in writeUTF Methode nicht verstehen. Was habe ich vermisst oder missverstanden?

    
Andremoniy 30.03.2014, 07:44
quelle

1 Antwort

9

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".

    
Erwin Bolwidt 30.03.2014, 07:51
quelle