美文网首页
StreamCorruptedException

StreamCorruptedException

作者: 编码之路从零开始 | 来源:发表于2019-05-14 14:12 被阅读0次

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

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

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

    相关文章

      网友评论

          本文标题:StreamCorruptedException

          本文链接:https://www.haomeiwen.com/subject/vxxsaqtx.html