我使用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(并给予自动拳击),但我想知道是否有一个适当的方法,让海森对待一个字符作为一个字符之前,我开始通过这种扭曲。
1条答案
按热度按时间trnvg8h31#
默认的Hessian序列化器将字符(char原语或对象)转换为字符串,请参阅此处的源代码:
https://github.com/ebourg/hessian/blob/git-svn/src/com/caucho/hessian/io/BasicSerializer.java#L144
要解决这个问题,你要么编写自己的Hessian序列化器,要么使用 Package 器对象: