【发布时间】:2013-01-16 08:02:03
【问题描述】:
在我的实验中,
如果服务器有这个:
ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
然后客户端必须按照相反的顺序执行此操作:
ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
否则服务器和客户端会死锁。
这是什么原因?是否有正式的 API 规范?
【问题讨论】:
-
我本以为在写入任何内容之前尝试从
InputStream读取会导致问题(因为读取会阻塞),这意味着如果客户端和服务器都尝试从那里读取各自的@ 987654324@ 在您希望使用写入的同一线程中,然后您会遇到问题... -
@MadProgrammer 它确实会导致问题。这就是他问的原因。但仅适用于对象流,因为构造分别写入和读取标头。
-
@EJP - 错过了“流”中的“对象”:P - 是时候再喝点咖啡了
-
回答你标题中的问题,不,只要他们不都尝试先构造
ObjectInputStrram。如果他们都尝试先构造ObjectOutoutStrram,这是最安全的。
标签: java sockets serialization objectinputstream objectoutputstream