从客户端用BufferedReader写出一个字符串之后, 再写出一个Object,
服务器读取字符串正常, 再把服务器socket的inputstream包装成ObjectInputString的时候报StreamCorruptedException错, 请各位大神指点具体错误代码:
java.io.StreamCorruptedException: invalid stream header: 73720004
        at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
        at java.io.ObjectInputStream.<init>(Unknown Source)
        at Test2.main(Test2.java:13)
服务器端代码:ServerSocket ss = new ServerSocket(6756);
Socket s = ss.accept();
InputStream ins = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
String str = br.readLine();
System.out.println(str);
ObjectInputStream bis = new ObjectInputStream(ins);
/* 上面的语句报 java.io.StreamCorruptedException: invalid stream header: 73720004 错 */
User user = (User)bis.readObject();System.out.println(user.name);
bis.close();
s.close();客户端代码:OutputStream outs = s.getOutputStream();
PrintWriter pw = new PrintWriter(outs, true);
pw.println("test");
ObjectOutputStream oos = new ObjectOutputStream(outs);
oos.writeObject(new User("hello"));
oos.close();
s.close();
以上代码直接在main方法中定义的

解决方案 »

  1.   

    弱弱的问一句:“楼主的User类实现了java.io.Serializable吗?”
      

  2.   

    你这代码貌似问题有点大: 你看一下这个代码:import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;public class TcpServer
    {
    public static void main(String[] args) throws Exception
    {

    ServerSocket ss = new ServerSocket(5000);

    Socket socket = ss.accept();

    InputStream is = socket.getInputStream();

    OutputStream os = socket.getOutputStream();

    byte[] buffer = new byte[200];

    int length = is.read(buffer);

    System.out.println(new String(buffer, 0 ,length));

            os.write("welcome".getBytes());

    is.close();
    os.close();
    socket.close();
    }
    }import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;public class TcpClient
    {
    public static void main(String[] args) throws Exception
    {


    Socket socket = new Socket("127.0.0.1", 5000);

    InputStream is = socket.getInputStream();

    OutputStream os = socket.getOutputStream();

    os.write("hello world".getBytes());

    byte[] buffer = new byte[200];

    int length = is.read(buffer);

    System.out.println(new String(buffer, 0 ,length));
            is.close();
    os.close();
    socket.close();
    }
    }
      

  3.   

    你的代码是写出字节流 可是我想先读字符流再读字节流 为什么不行呢我客户端先写出Object再写String正常,但是先写String再写Object服务器端就报错 不知何故看错误描述 应该是读取头信息的时候报错的    protected void readStreamHeader()
    throws IOException, StreamCorruptedException
        {
    short s0 = bin.readShort();
    short s1 = bin.readShort();
    if (s0 != STREAM_MAGIC || s1 != STREAM_VERSION) {
        throw new StreamCorruptedException(
    String.format("invalid stream header: %04X%04X", s0, s1));
    }
        }
    ObjectInputStream类的这个方法报错
    bin是BlockDataInputStream类型的 可是我在源代码里没有找到这个类...
      

  4.   

    我测试了还真没报错,只把User类的代码贴出来:
    package com.csdn;
    import java.io.Serializable;public class User implements Serializable
    {
    String name; public User(String name)
    {
    this.name = name;
    }
    }
    2:运行结果
    test
    hello这个错误可能是楼主的User类的问题吧。
    PS:BlockDataInputStream是ObjectInputStream的私有内部类,源码也是能看到的。
      

  5.   


    哥们 没有序列化的错误我还是能分清楚的
    java.io.NotSerializableException: User
    问题不是这个错误..
      

  6.   

    运行10次 大约能成功2次..其他的8次都报错D:\笔记\day041>java Test3
    test
    helloD:\笔记\day041>java Test3
    test
    Exception in thread "main" java.io.StreamCorruptedException: invalid stream head
    er: 73720004
            at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
            at java.io.ObjectInputStream.<init>(Unknown Source)
            at Test3.main(Test3.java:13)D:\笔记\day041>java Test3
    test
    helloD:\笔记\day041>java Test3
    test
    Exception in thread "main" java.io.StreamCorruptedException: invalid stream head
    er: 73720004
            at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
            at java.io.ObjectInputStream.<init>(Unknown Source)
            at Test3.main(Test3.java:13)D:\笔记\day041>java Test3
    test
    helloD:\笔记\day041>java Test3
    test
    Exception in thread "main" java.io.StreamCorruptedException: invalid stream head
    er: 73720004
            at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
            at java.io.ObjectInputStream.<init>(Unknown Source)
            at Test3.main(Test3.java:13)D:\笔记\day041>java Test3
    test
    Exception in thread "main" java.io.StreamCorruptedException: invalid stream head
    er: 73720004
            at java.io.ObjectInputStream.readStreamHeader(Unknown Source)