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

为什么对象流的初始化顺序在java网络编程中很重要?,java,serialization,network-programming,Java,Serialization,Network Programming,根据我的教授提供的以下信息: 客户端创建ObjectOutputStream和ObjectInputStream对象来发送请求和接收回复。CalculateClient构造函数是: public CalculateClient( String host, int port ) throws IOException { /* determine the address of the server and connect to it */ serverHost = Inet

根据我的教授提供的以下信息:


客户端创建
ObjectOutputStream
ObjectInputStream
对象来发送请求和接收回复。
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



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

这在你发布的代码注释中有解释,不是吗

//ObjectInputStream阻止,直到
//连接端刷新其ObjectOutputStream

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


作为问这个问题的替代方法,您可以简单地切换创建顺序并观察结果。可以说,这对你来说花费更少的精力,而且作为奖励,你已经学会了如何解决问题并进行批判性思考。

这在你发布的代码评论中有解释,不是吗

//ObjectInputStream阻止,直到
//连接端刷新其ObjectOutputStream

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


作为问这个问题的替代方法,您可以简单地切换创建顺序并观察结果。可以说,这对你来说花费更少的精力,而且作为奖励,你已经学会了如何解决问题并进行批判性思考。

这在你发布的代码评论中有解释,不是吗

//ObjectInputStream阻止,直到
//连接端刷新其ObjectOutputStream

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


作为问这个问题的替代方法,您可以简单地切换创建顺序并观察结果。可以说,这对你来说花费更少的精力,而且作为奖励,你已经学会了如何解决问题并进行批判性思考。

这在你发布的代码评论中有解释,不是吗

//ObjectInputStream阻止,直到
//连接端刷新其ObjectOutputStream

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

作为问这个问题的替代方法,您可以简单地切换创建顺序并观察结果。可以说,这对您来说花费的精力更少,而且您还学会了如何解决问题并进行批判性思考。

阅读以下javadoc:Read the follow javadoc:Read the follow javadoc:Read the following javadoc:Read the following javadoc: