3

我已经使用 Hessian 一段时间了,但只是注意到以下行为。如果您在 Hessian 中序列化 java.lang.Character,它将反序列化为字符串。

public class TestHessianChar {
    public static void main(String... args) throws IOException {
        // Serialize
        Character c = new Character('x');
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        Hessian2Output hessian2Output = new Hessian2Output( byteArrayOutputStream );
        hessian2Output.startMessage();
        hessian2Output.writeObject(c);
        hessian2Output.completeMessage();
        hessian2Output.close();
        byte[] dataBytes = byteArrayOutputStream.toByteArray();

        // Deserialize
        Hessian2Input hessian2Input = new Hessian2Input( new ByteArrayInputStream(  dataBytes ) );
        hessian2Input.startMessage();
        Object o = hessian2Input.readObject();
        hessian2Input.completeMessage();
        hessian2Input.close();

        System.out.println(o.getClass().getName());
    }
}

此代码的输出是:

java.lang.String

我假设它与与语言无关的原语序列化有关,但这很烦人。我正在编写一个 JMS 驱动程序并且需要区分 char 和 String,因为规范需要不同的行为。我正在考虑编写我自己的类来表示一个字符(并放弃自动装箱),但我想知道在我开始经历这种扭曲之前是否有适当的方法让 Hessian 将一个字符视为一个字符。

4

0 回答 0