Socket编程
在连续使用(中间没有中断)ObjectOutputStream 和其他输出流(PrintStream)时,可能会由于流的写出速度过快,导致
java.io.StreamCorruptedException: invalid stream header: 00000002
例如以下代码
public class Test{
public static void main(String[] args){
ServerSocket server = new ServerSocket(8888);
Socket socket = server.accept();
Member member = new Member();
member.setName("ss");
member.setAge(20);
member.setSignature("ssssssssssssss");
IOUtil.writeString(socket,"3,ok"); // 写一个字符串
IOUtil.writeObject(socket,members); // 写一个对象
}
}
public class IOUtils{
public static void writeString(Socket socket, String message){
try {
PrintStream printStream = new PrintStream(socket.getOutputStream());
printStream.println(message);
printStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void writeObject(Socket socket, Serializable object){
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
objectOutputStream.reset();
objectOutputStream.writeObject(object);
objectOutputStream.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
以上代码在客户端多次请求时可能会发生该错误,但是如果在写字符串和写对象中间加一个输出或者线程中断则可以避免该错误
同理:如果客户端高频率向服务器发送字符串流数据和对象流数据也可能发生该错误
网友评论