当前位置:  开发笔记 > 编程语言 > 正文

使用DataOutputStream编写大字符串

如何解决《使用DataOutputStream编写大字符串》经验,为你挑选了2个好方法。

我一直在做一些套接字编程来通过线路传输信息.我遇到了DataOutputStream.writeUTF()的问题.它似乎允许高达64k的字符串,但我有一些情况,我可以跑过这个.是否有任何好的替代方案支持更大的字符串或我需要自己滚动?



1> kasperjj..:

在使用将每个字符压缩为一个,两个或三个字节的算法之前,它实际上使用两个字节来写入字符串的长度.(请参阅有关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> ebruchez..:

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字节的流标题,但它通常会付出相当小的代价.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有