2014-02-22 2 views
2

어떻게 JSON 개체의를 통해 소켓이 자바 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가 예외를 제공합니까?

+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'에 대한 포인터를 보내 주셔서 감사합니다; 나는 상수를 가로 지르지 않았다 (IMHO, 어리석은 위치에있다). – chrylis

+0

UTF8은 JSON의 * 유일한 * 바이트 인코딩입니다. 다른 모든 인코딩은 합법적 인 JSON이 아닙니다. –

+0

@HotLicks : 흥미 롭습니다 - 정의 된 부분은 어디에 있습니까? –