我已经使用了Hessian一段时间,但只是注意到以下行为。如果在Hessian中序列化java.lang.Character,它会反序列化为String。
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,因为规范需要不同的行为。我正在考虑编写自己的类来代表一个char(并放弃自动装箱),但我想知道是否有一种正确的方法让Hessian在开始经历这样的扭曲之前将角色视为一个角色。