我一直在做一些套接字编程来通过线路传输信息。我遇到了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