【发布时间】:2018-11-05 20:57:10
【问题描述】:
我必须在只能传输字符串的系统中传递一个对象。序列化非常适合我的需要,但我无法让这个指标对象正确序列化。
Java 创建对象:
Map<String, HashMap<String, String>> metrics = new HashMap<String, HashMap<String, String>>();
String serializedObject = "";
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream so = new ObjectOutputStream(bo);
so.writeObject(metrics);
so.close();
serializedObject = bo.toString();
} catch (Exception e) {
System.out.println(e);
}
…将 serializedObject 作为字符串传递…
Java 将对象反消毒为度量对象。
Map<String, HashMap<String, String>> metrics = new HashMap<String, HashMap<String, String>>();
try {
byte b[] = serializedObject.getBytes();
ByteArrayInputStream bi = new ByteArrayInputStream(b);
ObjectInputStream si = new ObjectInputStream(bi);
metrics = (Map<String, HashMap<String, String>>) si.readObject();
si.close();
} catch (Exception e) {
System.out.println(e);
}
我没有收到错误,但打印出序列化对象的字节表明它太小而不能成为我正在序列化的数据。
【问题讨论】:
-
不打印字节,为什么不在序列化之前和反序列化之后打印 Map,而不是猜测它是否太小?或者更好的是,测试该机器人是否相等。另外,您是否阅读过 ByteArrayOutputStream.toString() 的 javadoc?对任意字节使用该方法似乎是个好主意?
标签: java serialization hashmap