【问题标题】:How to send Json object through java sockets?如何通过 java 套接字发送 Json 对象?
【发布时间】: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 类?

标签: java json sockets objectoutputstream


【解决方案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:这并不意味着这些 un​​icode 代码点必须编码为 UTF8。 UTF8 是将 unicode 代码点转换为字节的众多方法之一。例如,您也可以使用 UTF16 或 UTF32。编码不是传输协议的属性(大多数时候是 HTTP)吗?
  • @Daniel:为什么要以 Java 特定的二进制序列化格式包装一个很好的可移植格式 (JSON)?
猜你喜欢
  • 2014-01-11
  • 2021-01-11
  • 1970-01-01
  • 2012-08-29
  • 2012-03-13
  • 2013-09-02
  • 2015-08-31
相关资源
最近更新 更多