ObjectOutputStream StreamCorruptedException

print_er 2012-10-16 11:55:23
从客户端用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方法中定义的
...全文
151 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
print_er 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 3 楼 的回复:

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


弱弱的回一句 这个真的实现了..

我测试了还真没报错,只把User类的代码贴出来:

Java code

package com.csdn;
import java.io.Serializable;

public class……
[/Quote]
运行10次 大约能成功2次..其他的8次都报错

D:\笔记\day041>java Test3
test
hello

D:\笔记\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
hello

D:\笔记\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
hello

D:\笔记\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)
print_er 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 3 楼 的回复:

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


弱弱的回一句 这个真的实现了..

我测试了还真没报错,只把User类的代码贴出来:

Java code

package com.csdn;
import java.io.Serializable;

public class……
[/Quote]

哥们 没有序列化的错误我还是能分清楚的
java.io.NotSerializableException: User
问题不是这个错误..
rockets311 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

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


弱弱的回一句 这个真的实现了..
[/Quote]
我测试了还真没报错,只把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的私有内部类,源码也是能看到的。
print_er 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 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……
[/Quote]
你的代码是写出字节流 可是我想先读字符流再读字节流 为什么不行呢

我客户端先写出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类型的 可是我在源代码里没有找到这个类...
print_er 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
弱弱的问一句:“楼主的User类实现了java.io.Serializable吗?”
[/Quote]

弱弱的回一句 这个真的实现了..
zhaoming262350 2012-10-17
  • 打赏
  • 举报
回复
你这代码貌似问题有点大: 你看一下这个代码:

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();
}
}
rockets311 2012-10-17
  • 打赏
  • 举报
回复
弱弱的问一句:“楼主的User类实现了java.io.Serializable吗?”

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧