簡體   English   中英

ObjectOutputStream方法:writeBytes(String str)vs writeUTF(String s);

[英]ObjectOutputStream methods: writeBytes(String str) vs writeUTF(String s);

這兩者之間的主要區別是什么?

他們倆都是為了寫字符串。

public void writeUTF(String str)
              throws IOException

Primitive data write of this String in modified UTF-8 format.

VS

public void writeBytes(String str)
                throws IOException

Writes a String as a sequence of bytes.

我什么時候應該使用一個而不是另一個?

它位於文檔中...來自DataOutput.writeBytes(String)

將字符串寫入輸出流。 對於字符串s中的每個字符,按順序,將一個字節寫入輸出流。 如果s為null,則拋出NullPointerException。

如果s.length為零,則不寫入任何字節。 否則,首先寫入字符s [0],然后寫入s 1 ,依此類推; 寫的最后一個字符是s [s.length-1]。 對於每個字符,寫入一個字節,即低位字節,與writeByte方法完全相同。 字符串中每個字符的高位8位被忽略。

換句話說,“Sod Unicode,我們不關心任何不在ISO-8859-1中的字符。哦,我們假設你也不關心字符串的長度。”

請注意, writeBytes甚至不會嘗試檢測數據損壞 - 如果您寫出一個不在ISO-8859-1中的字符,它將只是靜默地丟棄高字節。

只說拒絕 - writeUTF是你的朋友......假設你的字符串長度小於64K。

當然,如果你有一個協議,你試圖實現它本身需要單字節編碼(ISO-8859-1或ASCII)並且不使用長度,那么writeBytes 可能是合適的 - 但我個人可能自己執行文本到字節的轉換,然后使用write(byte[])代替......它更清晰。

如果你的String有可能持有使用寬字符的東西(基本上是標准ASCII以外的東西),請使用UTF。 如果您的輸出需要每個字符一個字節的編碼,例如許多網絡協議中的標頭標簽,請使用字節。

當使用UTF存儲數據時,它存儲在通用字符集中,因此當字符串數據包含非ASCII字符時使用writeUTF,否則writeByte就可以了。

另外,writeUTF的最大長度為65535字節(字節數組的長度取決於String的每個字符)。

如果你的String的UTF表示大於那個,你必須使用你自己的轉換並使用write(byte[])如Jon所說。

當且僅當以下情況時,您應該使用readUTF()

  1. 你在另一端使用writeUTF() ,和
  2. 你可以忍受64k的限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM