我已经使用 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 将一个字符视为一个字符。