StreamCorruptedException

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();
            }
        }
}

以上代码在客户端多次请求时可能会发生该错误,但是如果在写字符串写对象中间加一个输出或者线程中断则可以避免该错误

同理:如果客户端高频率向服务器发送字符串流数据和对象流数据也可能发生该错误

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。