【问题标题】:Java Special Symbol SerializationJava 特殊符号序列化
【发布时间】:2021-06-13 14:50:05
【问题描述】:

我想知道如何在 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

我想知道 ch 是如何用 -62 -128 表示的。 "abc" 是根据它们的 ASCII 值来表示的,但是 ch 是如何用 -62 -128 来表示的

【问题讨论】:

标签: java serialization char


【解决方案1】:

Java 字符串在默认序列化中采用 UTF-8 编码。

你可以看到 UTF-8 的完整规范汇总on the Wikipedia page

请注意,0x00 和 0x7F 之间的字符按原样存储为一个字节,但字符 0x80 到 0x07FF 存储为两个字节序列,110xxxxxx 10xxxxxx,其中“x”表示用于值的连续 11 位在那个范围内。

您的 char 128 在该范围内,位序列为 00010000000。因此,如果您将其解释为带符号的 8 位字符,则相应的两字节 UTF-8 序列为 11000010 10000000 或 -62、-128。

(对于某些特殊字符,UTF-8 的 Java 版本实际上与 Wiki 上的略有不同,但不会影响此字符串!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多