在向下閱讀以前,請注意 JavaBean 要實現 Serializable 接口。java
ObjectOutputStream 初始化時會送出其 header 數據給對端。 ObjectInputStream 初始化時會阻塞地接收來自對端的 header 數據。緩存
發現了嗎,這可能會有兩處問題。socket
對 (1) 咱們只要保證兩端互恰便可。code
// server oos = new ObjectOutputStream(socket.getOutputStream()); ois = new ObjectInputStream(socket.getInputStream());
// client ois = new ObjectInputStream(socket.getInputStream()); oos = new ObjectOutputStream(socket.getOutputStream());
對 (2) 咱們要保證兩端初始化的邏輯一致。server
簡單舉例,也是給本身作個備忘。對象
數據包接口
import java.io.Serializable; public class PersonBean implements Serializable { public String name = null; }
讀get
ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); PersonBean person = (PersonBean) input.readObject();
寫input
PersonBean person = new PersonBean(); person.name = "name"; ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); output.writeObject(person); output.flush(); // 若是不刷新,則 ObjectOutputStream 會緩存上一個對象的引用,致使每次都送出的是同一個。