2014-02-22 115 views
2

你如何在java中发送的JSON对象的通过插座最好通过的ObjectOutputStream类这是我走到这一步,如何通过Java套接字发送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什么建议?

+1

难道你不认为这将是相关**你得到哪个**异常? –

+1

@FelixKling抱歉忘记更新了问题 – user3339626

+1

为什么在使用本机Java序列化时使用JSON?为什么不直接发送Java对象?你在谈论哪个JSONOnject类? –

回答

12

而不是使用ObjectOutputStream,你应该创建一个OutputStreamWriter,然后用它来编写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()); 
} 
+0

感谢指向'StandardCharsets'的指针;我不会跑过常数(这是,恕我直言,在一个愚蠢的位置)。 – chrylis

+0

UTF8是JSON的* only *字节编码。任何其他编码,它不合法的JSON。 –

+0

@HotLicks:有趣 - 定义的地方,仅供我未来参考? –