我一直在做一些套接字編程來通過線路傳輸信息。我遇到了DataOutputStream.writeUTF()的問題。它似乎允許高達64K的字符串,但我有幾種情況可以在這裏運行。是否有任何支持更大字符串的好選擇,還是需要自己推出?用DataOutputStream編寫大字符串
7
A
回答
15
實際上它使用兩個字節來寫入字符串的長度,然後使用一種算法將其壓縮爲每個字符一個,兩個或三個字節。 (請參閱關於java.io.DataOutput的文檔)它接近於UTF-8,但即使記錄爲如此,也存在兼容性問題。如果您不擔心要編寫的數據量,則可以通過首先編寫字符串的長度,然後使用getBytes方法編寫字符串的原始數據來輕鬆編寫自己的數據。
// Write data
String str="foo";
byte[] data=str.getBytes("UTF-8");
out.writeInt(data.length);
out.write(data);
// Read data
int length=in.readInt();
byte[] data=new byte[length];
in.readFully(data);
String str=new String(data,"UTF-8");
2
您應該可以使用帶有UTF-8編碼的OutputStreamWriter。沒有顯式的writeUTF方法,但可以在構造函數中設置字符集。嘗試
Writer osw = new OutputStreamWriter(out, "UTF-8");
其中out
是你現在的包裝無論OutputStream中。
7
ObjectOutputStream.writeObject()
正確處理長字符串(通過查看源代碼進行驗證)。寫串出是這樣的:
ObjectOutputStream oos = new ObjectOutputStream(out);
... other write operations ...
oos.writeObject(myString);
... other write operations ...
閱讀這樣說:
ObjectInputStream ois = new ObjectInputStream(in);
... other read operations ...
String myString = (String) ois.readObject();
... other read operations ...
與DataOutputStream
另一個區別是實例化時使用ObjectOutputStream
自動寫入一個4字節流標頭,但它通常會是一個相當小的罰款來支付。
相關問題
- 1. 字符串太大DataOutputStream類
- 2. haskell編寫大字符串
- 3. 大寫字符串
- 4. 大寫字符串
- 5. 大寫字符串
- 6. 用字符串編寫XML
- 7. DataOutputStream類:所述「編碼的字符串太長」限制
- 8. 用大寫字母拆分字符串
- 9. 用大寫字母拆分字符串
- 10. 字符串大寫python
- 11. 字符串的大寫NSArray?
- 12. 大寫的字符串(SWIFT)
- 13. 搜索大寫字符串
- 14. sed/awk大寫字符串
- 15. eWAM - 大寫字符串值
- 16. 用大寫字母字符串字符串
- 17. 用preg_replace替換大寫字母和非大寫字符串
- 18. java控制大寫和小寫字符串2字符串
- 19. 編寫原型來檢查字符串是否大寫
- 20. 字符串大寫不起作用
- 21. 首字母大寫的字符串首字母大寫
- 22. 使用java編寫json字符串(JSP)
- 23. 用JavaScript編寫西里爾字符串
- 24. 在Android中編寫DataOutputStream的幫助
- 25. Android的 - 編輯我的字符串所以每個字大寫
- 26. Python用另一個字符串替換字符串(大寫或小寫)
- 27. 僅字符串首字母大寫java
- 28. 更改字符串 - 要大寫字母
- 29. 字符串的首字母大寫
- 30. Mysql - 字符串中的大寫字母
希望有一個API,但基本上證實了我的想法。 – Glen 2008-11-07 02:01:49