我正在用Java编写服务器/客户端应用程序。我在服务器端进行一些数据处理,然后将其存储在HashMap
中。将HashMap
传递给客户的最佳方式是什么?
答案 0 :(得分:4)
最直接的解决方案是使用ObjectOutputStream
和ObjectInputStream
try {
...
final Map<A, B> yourMap = ...; // Map to send
final OutputStream yourOutputStream = ...; // OutputStream where to send the map in case of network you get it from the Socket instance.
final ObjectOutputStream mapOutputStream = new ObjectOutputStream(yourOutputStream);
mapOutputStream.writeObject(yourMap);
...
} finally {
outputStream.close();
}
接收它:
try {
...
final InputStream yourInputStream = ...; // InputStream from where to receive the map, in case of network you get it from the Socket instance.
final ObjectInputStream mapInputStream = new ObjectInputStream(yourInputStream);
final Map<A, B> yourMap = (Map) mapInputStream.readObject();
...
} finally {
mapInputStream.close();
}
请注意,这不需要任何外部库。
答案 1 :(得分:1)
你可以做一件事:
首先通过以下方式将地图序列化为json:
new JSONObject(map);
您可以从其文档中获得的其他功能 http://www.json.org/javadoc/org/json/JSONObject.html
然后使用来自客户端的ajax调用来填充要显示的json数据。
像:
$.ajax({
url: "your ajax url",
type: "POST",
data: myData,
context: this,
error: function () {},
dataType: 'json',
success : function () {
//You can use your data here.
}
});
答案 2 :(得分:1)
最佳解决方案在很大程度上取决于您在服务器和客户端之间使用的协议/通信。然而,json目前很流行,并允许所有数据编码为字符串,通常通过http发送。
有些库可以将对象编码为json。但是,创建String
:
String mapout = '{ ';
for(Map.Entry<String, Object> entry : map.entrySet())
mapout += "'" + entry.getKey() + "' : '" + entry.getValue() + ", ";
//remove trailing comma
if(mapout.length() > 2)
mapout = mapout.substring(0,mapout.length - 2);
mapout += " }";
如果你要创建很多Json,最好使用一个库,但是这段代码确实说明了json的使用方式以及时尚的原因。