根据我教授的以下信息:
客户端创建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
。
他没有详细说明原因。为什么这是真的?
答案 0 :(得分:3)
在您发布的代码的评论中对此进行了解释,不是吗?
// ObjectInputStream阻塞直到
//连接的一方刷新其ObjectOutputStream
因此,如果您尝试创建ObjectInputStream
,构造函数将等待,直到调用相应的ObjectOutputStream
flush()
方法。既然你还没有创建它,猜猜会发生什么?
作为询问此问题的替代方法,您可以简单地切换创建顺序并观察结果。你可以减少努力,作为奖励,你已经学会了如何解决问题和批判性地思考。