是否可以通过套接字从服务器向客户端发送TreeMap(包含密钥和值)?
答案 0 :(得分:4)
写入套接字与写入文件没什么不同。 ObjectOutputStream
类为我们提取该层的摘要。因此,您可以测试序列化与文件IO的顺利运行;然后写入Socket
非常容易。
TreeMap<YourKeyClass, YourValueClass> treeMap =
new TreeMap<>();
buildMyTree(treeMap);
FileOutputStream fout = new FileOutputStream("path/to/your/file.ser");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(treeMap);
回读您的对象以检查反序列化:
FileInputStream fin = new FileInputStream("path/to/your/file.ser");
ObjectInputStream ois = new ObjectInputStream(fin);
TreeMap<YourKeyClass, YourValueClass> treeMapFromFile = ois.readObject();
TreeMap
是可序列化的。只要YourValueClass
没有妨碍序列化的复杂结构,一切都运行得很好。例如,您可能会对YourValueClass
中的其他对象进行递归引用,在这种情况下,您必须在自己的writeObject
和readObject
序列化实现上处理您的工作。
因此,读取和写入检查非常重要,以确保一切都根据您的结构运行。
一旦确定序列化正常,请转到套接字编程。在继续使用套接字之前,确信序列化工作正常非常重要,因为如果你错过了序列化的一点,那么如果在套接字实现过程中出现任何问题,那么很难找到问题是。
服务器端:
//initialize your socket
//start listening on your socket
TreeMap<YourKeyClass, YourValueClass> treeMap = new TreeMap<>();
buildMyTree(treeMap);
ObjectOutputStream oos = new ObjectOutputStream(socketToClient.getOutputStream());
oos.writeObject(treeMap);
客户端:
//initialize your socket
ObjectInputStream ios = new ObjectInputStream(socketToServer.getInputStream());
TreeMap<YourKeyClass, YourValueClass> treeMapFromSocket = ois.readObject();
您可以参考以下来源:
答案 1 :(得分:1)
是的,这是可能的。
java.util.TreeMap实现接口java.io.Serializable。 此外,TreeMap中的所有键和值都必须实现此接口。