用Socket通訊的時候如果要用到ObjectInputStream 與 ObjectOutputStream的話,要確保Server端與Client端ObjectInputStream 與 ObjectOutputStream產生的順序。
在Server(Client)端產生一個ObjectInputStream流時必須確保在Client(Server)端產生一個ObjectOutputStream流。
根據上述原則,合法的可能產生順序有
1、
Server Client
ObjectInputStream ObjectOutputStream
ObjectOutputStream ObjectInputStream
2、
Server Client
ObjectOutputStream ObjectInputStream
ObjectInputStream ObjectOutputStream
其他情況都會引起阻塞。
引用:
public ObjectInputStream(InputStream in) throws IOException
-
Creates an ObjectInputStream that reads from the specified InputStream.
A serialization stream header is read from the stream and verified.
This constructor will block until the corresponding ObjectOutputStream
has written and flushed the header.
If a security manager is installed, this constructor will check for
the "enableSubclassImplementation" SerializablePermission when invoked
directly or indirectly by the constructor of a subclass which overrides
the ObjectInputStream.readFields or ObjectInputStream.readUnshared
methods.