我在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"等(即大写和小写字母和数字)。
答案 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);