通过 Socket 传递 TreeMap 对象(从服务器到客户端)

Passing TreeMap object over Socket (from server to client)

是否可以通过套接字从服务器向客户端发送 TreeMap(包含键和值)?

是的,这是可能的。

java.util.TreeMap 实现接口 java.io.Serializable。 此外,所有键和值 int TreeMap 都必须实现此接口。

写入套接字与写入文件没有什么不同。 ObjectOutputStream class 为我们抽象了该层。所以你可以测试你的序列化是否与文件 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 中的其他对象有递归引用,在这种情况下,您必须自行处理 writeObjectreadObject 序列化实现。

因此,读写检查非常重要,以确保一切都按照您的结构运行。

第三步:转向套接字编程

一旦你确定你的序列化工作正常,就转向套接字编程。在继续进行套接字之前,确保您的序列化工作完美非常重要,因为如果您错过了序列化的一点,那么如果在套接字实现过程中出现任何失败,将很难找到问题所在.

服务器端:

//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();

您可以参考以下来源使用: