使用java的对象流出现java.io.StreamCorruptedException: invalid stream header异常
原因是数据发送端发送对象到接收端
接收端对于同一个输入流创建了不同的对象输入流,而后用不同的对象输入流进行接收
下面模拟异常的发送
传输的对象:
public class User implements Serializable{
private String name;
private int age;
public User(String name, int age){
this.name = name;
this.age = age;
}
public String GetName(){
return this.name;
}
public int GetAge(){
return this.age;
}
}
客户端程序:
public class Client {
public static void main(String[] args) throws Exception {
Socket client = new Socket("127.0.0.1", 1234);
ObjectOutputStream objOutput = new ObjectOutputStream(client.getOutputStream());
//用同一输出流发送两个对象
User user = new User("小明", 20);
objOutput.writeObject(user);
User user1 = new User("小红", 10);
objOutput.writeObject(user1);
client.close();
}
}
服务端:
public class Server {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ServerSocket serverSocket = new ServerSocket(1234);
System.out.println("start. . .");
Socket clientSocket = serverSocket.accept();
//用clientSocket的输入流创建对象输入流objInput
ObjectInputStream objInput = new ObjectInputStream(clientSocket.getInputStream());
User user = (User)objInput.readObject();
System.out.println(user.GetName());
System.out.println(user.GetAge());
//用clientSocket的输入流创建对象输入流objInput2
ObjectInputStream objInput2 = new ObjectInputStream(clientSocket.getInputStream());
user = (User)objInput2.readObject();
System.out.println(user.GetName());
System.out.println(user.GetAge());
clientSocket.close();
serverSocket.close();
}
}
服务端用网络输入流创建了两个不同的对象输入流,这时就会产生异常,如果用同一个对象输入流接收就不会产生。