Java 特殊符号序列化
Java Special Symbol Serialization
我想知道原始字符是如何在java中序列化的。我序列化了一个class来理解字节信息是如何存储在java中的。以下是我连载的class
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 值表示的,但是 ch 是如何使用 -62 -128
表示的
Java 字符串在默认序列化中采用 UTF-8 编码。
您可以查看完整的 UTF-8 规范摘要on the Wikipedia page。
注意 0x00 和 0x7F 之间的字符按原样存储为一个字节,但字符 0x80 到 0x07FF 存储为两个字节序列,110xxxxx 10xxxxxx,其中 'x' 表示连续的 11用于该范围内值的位。
您的 char 128 在该范围内,位序列为 00010000000。因此相应的两字节 UTF-8 序列为 11000010 10000000,如果您将它们解释为带符号的 8 位字符,则为 -62、-128。
(UTF-8 的 Java 版本实际上与 Wiki 上的某些特殊字符略有不同,但不影响此字符串!)
我想知道原始字符是如何在java中序列化的。我序列化了一个class来理解字节信息是如何存储在java中的。以下是我连载的class
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 值表示的,但是 ch 是如何使用 -62 -128
表示的Java 字符串在默认序列化中采用 UTF-8 编码。
您可以查看完整的 UTF-8 规范摘要on the Wikipedia page。
注意 0x00 和 0x7F 之间的字符按原样存储为一个字节,但字符 0x80 到 0x07FF 存储为两个字节序列,110xxxxx 10xxxxxx,其中 'x' 表示连续的 11用于该范围内值的位。
您的 char 128 在该范围内,位序列为 00010000000。因此相应的两字节 UTF-8 序列为 11000010 10000000,如果您将它们解释为带符号的 8 位字符,则为 -62、-128。
(UTF-8 的 Java 版本实际上与 Wiki 上的某些特殊字符略有不同,但不影响此字符串!)