如何解决Java 特殊符号序列化
我想知道原始字符在java中是如何序列化的。我序列化了一个类来理解字节信息在java中是如何存储的。以下是我序列化的类。
public class Person implements Serializable{
char ch = (char) 128;
private String name = "abc" + ch;
private int age = 11;
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
}
当我把它转换成字节数组时,
的值"abc" + ch
是
97 98 99 -62 -128
我想知道 -62 -128 是如何表示 ch 的。 "abc" 根据它们的 ASCII 值表示,但如何使用 -62 -128 表示 ch
解决方法
Java 字符串在默认序列化中采用 UTF-8 编码。
您可以查看 UTF-8 的完整规范汇总 on the Wikipedia page。
请注意,0x00 和 0x7F 之间的字符按原样存储为一个字节,但字符 0x80 到 0x07FF 存储为两个字节的序列,110xxxxx 10xxxxxx,其中“x”表示用于值的连续 11 位在那个范围内。
您的 char 128 在该范围内,位序列为 00010000000。因此,相应的两字节 UTF-8 序列为 11000010 10000000,或者 -62、-128(如果您将它们解释为有符号的 8 位字符)。
(对于某些特殊字符,UTF-8 的 Java 版本实际上与 Wiki 上的略有不同,但不影响此字符串!)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。