在向下阅读以前,请注意 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 会缓存上一个对象的引用,致使每次都送出的是同一个。