如何通过 java 套接字发送 Json 对象?
Posted
技术标签:
【中文标题】如何通过 java 套接字发送 Json 对象?【英文标题】:How to send Json object through java sockets? 【发布时间】:2014-03-24 02:53:14 【问题描述】:如何通过 Java 中的 ObjectOutputStream 类通过套接字发送 Json 对象,这就是我目前所得到的
s = new Socket("192.168.0.100", 7777);
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
JSONObject object = new JSONObject();
object.put("type", "CONNECT");
out.writeObject(object);
但这对 java.io.streamcorruptedexception 异常有什么建议吗?
【问题讨论】:
您不认为这与您得到的哪个异常有关吗? @FelixKling 抱歉忘记更新了问题 如果使用原生 Java 序列化,为什么还要使用 JSON。为什么不直接发送 Java 对象?你说的是哪个 JSONOnject 类? 【参考方案1】:您应该创建一个OutputStreamWriter
,而不是使用ObjectOutputStream
,然后使用它将JSON 文本 写入流。您需要选择一种编码 - 我建议使用 UTF-8。比如:
JSONObject json = new JSONObject();
json.put("type", "CONNECT");
Socket s = new Socket("192.168.0.100", 7777);
try (OutputStreamWriter out = new OutputStreamWriter(
s.getOutputStream(), StandardCharsets.UTF_8))
out.write(json.toString());
【讨论】:
感谢StandardCharsets
的指针;我不会遇到常量(恕我直言,它位于一个愚蠢的位置)。
UTF8 是 JSON 的 only 字节编码。任何其他编码,它不是合法的 JSON。
@HotLicks:很有趣 - 这是在哪里定义的,仅供我将来参考?
@HotLicks:这并不意味着这些 unicode 代码点必须编码为 UTF8。 UTF8 是将 unicode 代码点转换为字节的众多方法之一。例如,您也可以使用 UTF16 或 UTF32。编码不是传输协议的属性(大多数时候是 HTTP)吗?
@Daniel:为什么要以 Java 特定的二进制序列化格式包装一个很好的可移植格式 (JSON)?以上是关于如何通过 java 套接字发送 Json 对象?的主要内容,如果未能解决你的问题,请参考以下文章
在actionscript服务器和java客户端之间通过socket发送对象