如何反序列化解构列表?

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(),然后是值。

这在另一端提供了足够的信息来精确反序列化正确的数量。