Java序列化 - 一个字符的字节数?

时间:2014-10-25 12:54:47

标签: java serialization

我在Java中使用字符串对象进行序列化。现在我想知道字符串中每个序列化字符的大小。

标准英文字母(例如' a' G')是否只需要1或2个字节,逗号或感叹号等特殊符号需要8个字节?

但是序列化字符串中需要多少字节数字符号(0 - 9)?

编辑:我按以下方式进行序列化:

socket = new Socket(host, port);
ObjectOutputStream outputStream = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
outputStream.writeObject(request);
outputStream.flush();

使用ObjectInputStream以类似的方式完成反序列化。

要序列化的对象(请求)包含String类型的字段,该字段可以是例如" AAAA"或" aAaA"或" a0A3a5"等(即大写和小写字母和数字)。

2 个答案:

答案 0 :(得分:1)

您使用JAVA序列化,因此它符合http://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html

  

String对象的表示由长度信息组成   后跟修改后的UTF-8编码的字符串的内容。该   修改后的UTF-8编码与JavaTM Virtual中使用的编码相同   机器和java.io.DataInput和DataOutput接口;它   与补充表示的标准UTF-8不同   字符和空字符。形式的长度   信息取决于修改后的UTF-8中字符串的长度   编码。如果给定String的修改后的UTF-8编码较小   长度超过65536字节,长度写为2个字节   表示无符号的16位整数。从JavaTM 2开始   平台,标准版,v1.3,如果字符串的长度在   修改后的UTF-8编码为65536字节或更多,写入长度   8个字节,表示带符号的64位整数。 typecode   在序列化流中的String之前指示哪个   format用于编写String。

字符串序列化为UTF-8,因此ASCII字符用1字节编码,数字是ASCII,是的,用1字节编码。

有关详细信息,请参阅http://en.wikipedia.org/wiki/UTF-8

答案 1 :(得分:0)

ObjectOutputStream旨在编写对象。 char占用大约78个字节。如果要将char写为两个字节,可以使用DataOutputStream writeChar,或者如果要使用一个字节,则可以写(ch);