2012-11-01 2 views
1

객체를 직렬화하고 httpserver에서 전송해야합니다. 서버에서 클라이언트로 문자열을 보내는 방법을 이미 알고 있지만 어떻게 해야할지 모르겠습니다.HttpHandler 클래스에서 객체를 직렬화하는 방법

public class Test { 
public static void main(String[] args) throws Exception { 
    HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); 
    server.createContext("/test", new MyHandler()); 
    server.setExecutor(null); // creates a default executor 
    server.start(); 
} 
static class MyHandler implements HttpHandler { 
    public void handle(HttpExchange t) throws IOException { 
     String response = "This is the response"; 

     //this part here shows how to send a string 
     //but i need to send an object here 
     t.sendResponseHeaders(200, response.length()); 
     OutputStream os = t.getResponseBody(); 
     os.write(response.getBytes()); 
     os.close(); 
    } 
} 
} 

그래서 난 구글하지만 검색 결과로했는데, 나는 기계적으로 HttpServer에가에 있어요에 사용하지 않을 것을 메신저로하고 메신저도 모른 채 (코드를 변경하려고 :

개체 그래서 나는이 코드를 java) 이 방법은 :

하지만 일식은 나에게 ObjectOutputStream에() 생성자이 보이지 않는 그의 HttpExchange이 인수 적용되지 않습니다 하더군요 오류 (INT, ObjectInputStream에) 나는이 문제를 해결할 수있는 방법을

당신이 어떤 생각을 가지고 있습니까를 보여줍니다 ? 도움을 주셔서 감사합니다.

답변

0

은 대체 할 수있는

t.sendResponseHeaders(200, objOut);

와 사용자 싸이언에서 언급 한 바와 같이

t.sendResponseHeaders(200,0);

on this question

,
1

당신은 매개 변수

ObjectOutputStream objOut = new ObjectOutputStream(the http or any other output stream here); 

ObjectOutputStream에의 생성자는 일부 헤더 바이트를 전송하고의 ObjectInputStream의 생성자가 이러한 헤더 바이트를 기대로 하나의 OutputStream와 생성자를 accesible 있습니다. 모든 객체에 대해 새 ObjectOutputStream과 새 ObjectInputStream을 만들거나 모든 객체에 대해 하나의 ObjectOutputStream 및 ObjectInputStream 만 만들어야합니다.

더 간단한 대안은 google gson 일 수 있습니다. 사용하기 쉽고 자바 클래스를 json 문자열과 역으로 변환합니다. 당신이 다른 일을 시도 몇 시간 후

+0

나는 그것을 "http 또는 다른 출력 스트림을 여기에"obj 함께 변경 한 짓을하지만 나에게 OutputStream을 인스턴스화 할 수 없다는 오류를 보여줍니다. –

관련 문제