为什么对象流的初始化顺序在java网络编程中很重要?

时间:2014-02-19 22:28:52

标签: java serialization network-programming

根据我教授的以下信息:


客户端创建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


他没有详细说明原因。为什么这是真的?

1 个答案:

答案 0 :(得分:3)

在您发布的代码的评论中对此进行了解释,不是吗?

  

// ObjectInputStream阻塞直到
  //连接的一方刷新其ObjectOutputStream

因此,如果您尝试创建ObjectInputStream,构造函数将等待,直到调用相应的ObjectOutputStream flush()方法。既然你还没有创建它,猜猜会发生什么?

作为询问此问题的替代方法,您可以简单地切换创建顺序并观察结果。你可以减少努力,作为奖励,你已经学会了如何解决问题和批判性地思考。