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

时间:2016-12-28 06:05:41

标签: java sockets treemap

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

2 个答案:

答案 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中的其他对象进行递归引用,在这种情况下,您必须在自己的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();

您可以参考以下来源:

答案 1 :(得分:1)

是的,这是可能的。

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