我在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“等(即大小写字母和数字)。
发布于 2014-10-25 13:43:36
您使用JAVA序列化,因此它符合http://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html。
字符串对象的表示由长度信息和修改后的UTF-8编码的字符串内容组成。修改后的UTF-8编码与JavaTM虚拟机以及java.io.DataInput和DataOutput接口中使用的编码相同;它在表示补充字符和空字符方面与标准UTF-8不同。长度信息的形式取决于修改后的UTF-8编码中字符串的长度。如果对给定字符串的修改后的UTF-8编码长度小于65536字节,则长度被写入为两个字节,表示一个无符号16位整数。从JavaTM 2平台标准版v1.3开始,如果修改后的UTF-8编码中字符串的长度为65536字节或更长,则长度以8个字节编写,表示一个有符号的64位整数。序列化流中字符串前面的类型代码指示用于写入字符串的格式。
字符串被序列化为UTF-8,因此ASCII字符被编码为1字节,而数字是ASCII,是的,它们被编码为1字节。
有关进一步信息,请参见http://en.wikipedia.org/wiki/UTF-8。
发布于 2014-10-25 17:31:19
ObjectOutputStream是设计用来编写对象的。一个字符大约需要78个字节。如果你想把一个字符写成两个字节,你可以使用DataOutputStream writeChar或者如果你想使用一个字节,你可以写(Ch);
https://stackoverflow.com/questions/26562605
复制相似问题