2014-02-19 2 views
0

내 교수로부터 다음과 같은 정보를 바탕으로 :Java 네트워크 프로그래밍에서 객체 스트림의 초기화 순서가 중요한 이유는 무엇입니까?


클라이언트는 ObjectOutputStreamObjectInputStream 객체 요청을 전송하고, 응답을받을를 작성합니다. CalculateClient 생성자는 : 네트워크 애플리케이션에서

public CalculateClient(String host, int port) 
    throws IOException 
{ 
    /* determine the address of the server and connect to it */ 
    serverHost = InetAddress.getByName(host); 
    serverPort = port; 
    calculate = new Socket(serverHost, serverPort); 

    OutputStream out = calculate.getOutputStream(); 
    request = new ObjectOutputStream(
       new BufferedOutputStream(out)); 
    request.flush(); 

    // ObjectInputStream blocks until 
    // the connected side flushes its ObjectOutputStream 
    InputStream in = calculate.getInputStream(); 
    reply = new ObjectInputStream(in); 
} 

는 오브젝트를 사용하여 입력 스트림 및 출력 스트림 소켓의 구성 순서가 중요하다. ObjectOutputStream을 먼저 만들어야합니다. 그런 다음 물을 버려야합니다. 그런 다음 ObjectInputStream을 만들 수 있습니다.


그는 이유에 대해 자세히 설명하지 않습니다. 왜 이것이 사실입니까?

+3

다음 javadoc을 읽습니다. http://docs.oracle.com/javase/7/docs/api/java/io/ObjectInputStream.html#ObjectInputStream%28java.io.InputStream%29 –

답변

3

게시 한 코드의 설명에 설명되어 있습니다. 그렇지 않습니까?

는 // ObjectInputStream를 차단하면 해당 ObjectOutputStreamflush() 메서드가 호출 될 때까지 생성자가 대기하는 ObjectInputStream을 만들려고하면
가 가 // 연결된 측면

그래서 그 ObjectOutputStream에 플러시 때까지. 아직 만들지 않았으므로 어떻게 될지 생각해보십시오.

이 질문을하는 대신, 생성 순서를 전환하고 결과를 관찰 할 수 있습니다. 논쟁의 여지가없이 노력을 기울이고 보너스로 비판적으로 문제를 해결하고 사고하는 방법을 배웠습니다.

관련 문제