如何反序列化解构列表?
How do I deserialize a deconstructed List?
我有一个 TreeMap 我正在尝试使其可序列化,但我不想发送整个对象,而是想解构它,发送数据,然后在另一端重建。
我用
序列化它
for (Map.Entry<Integer, LinkedList<T>> entry: map.entrySet()) {
s.writeObject("p"+entry.getKey());
for (T t : entry.getValue()) {
s.writeObject(t);
}
}
我会用
之类的东西反序列化它
LinkedList<T> list = new LinkedList<>();
int p = Integer.parseInt(((String) s.readObject()).substring(1));
while (s.available() != 0) {
Object o = s.readObject();
if (((String) o).charAt(0) == 'p') {
store.put(p, new LinkedList<>(list));
p = Integer.parseInt(((String) o).substring(1));
list = new LinkedList<>();
} else {
list.add((T) o);
}
}
我的问题是是否有比 available
为 0 更好的方法来了解对象何时完成发送?
(诸如“你为什么那样做,只使用默认序列化”之类的回答没有帮助。)
您使用的序列化格式没有足够的信息来重建列表 -- 例如如果 T
是以 p
.
开头的 String
相反,首先,将映射中的条目数序列化为 int
。然后,那么多次,序列化键,然后是 entry.getValue().size()
,然后是值。
这在另一端提供了足够的信息来精确反序列化正确的数量。
我有一个 TreeMap 我正在尝试使其可序列化,但我不想发送整个对象,而是想解构它,发送数据,然后在另一端重建。 我用
序列化它for (Map.Entry<Integer, LinkedList<T>> entry: map.entrySet()) {
s.writeObject("p"+entry.getKey());
for (T t : entry.getValue()) {
s.writeObject(t);
}
}
我会用
之类的东西反序列化它LinkedList<T> list = new LinkedList<>();
int p = Integer.parseInt(((String) s.readObject()).substring(1));
while (s.available() != 0) {
Object o = s.readObject();
if (((String) o).charAt(0) == 'p') {
store.put(p, new LinkedList<>(list));
p = Integer.parseInt(((String) o).substring(1));
list = new LinkedList<>();
} else {
list.add((T) o);
}
}
我的问题是是否有比 available
为 0 更好的方法来了解对象何时完成发送?
(诸如“你为什么那样做,只使用默认序列化”之类的回答没有帮助。)
您使用的序列化格式没有足够的信息来重建列表 -- 例如如果 T
是以 p
.
String
相反,首先,将映射中的条目数序列化为 int
。然后,那么多次,序列化键,然后是 entry.getValue().size()
,然后是值。
这在另一端提供了足够的信息来精确反序列化正确的数量。