序列化对象遇到的问题...

wangjch 2005-04-20 11:42:54
刚学序列化,写了一个通过sock窗松序列化的测试程序,如下:

序列化对象:

import java.io.Serializable;
public class MySerializableTest implements Serializable
{
private String name = null;
private String friend = null;
private String school = null;

public MySerializableTest()
{
super();
init();
}

private void init()
{
this.name = "magic";
this.friend = "flower";
this.school = "No.1";

}
public String getFriend()
{
return friend;
}
public String getName()
{
return name;
}
public String getSchool()
{
return school;
}
public void setFriend(String string)
{
friend = string;
}
public void setName(String string)
{
name = string;
}
public void setSchool(String string)
{
school = string;
}

}

sock发送:

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class SockWriteObject
{

public static void main(String[] args)
{
try
{
ObjectOutputStream obout;
Socket sock = new Socket("127.0.0.1",6000);
MySerializableTest test = new MySerializableTest();

test.setName("metarnet");
test.setFriend("native");
test.setSchool("bupt");

obout = new ObjectOutputStream(new BufferedOutputStream(sock.getOutputStream()));
obout.writeObject(test);
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}

sock接收:

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.ObjectInputStream;

import java.net.ServerSocket;
import java.net.Socket;

public class ServerReadObject
{

public static void main(String[] args)
{
try
{
ObjectInputStream obin;
ServerSocket server = new ServerSocket(6000);
Socket sock;


sock = server.accept();

obin = new ObjectInputStream(new BufferedInputStream(sock.getInputStream()));

MySerializableTest test = (MySerializableTest)obin.readObject();

System.out.println(test.getName());
System.out.println(test.getFriend());
System.out.println(test.getSchool());

}
catch (IOException e)
{
e.printStackTrace();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
}

结果报错:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:222)
at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2150)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2163)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2631)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:734)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253)
at serializableTest.ServerReadObject.main(ServerReadObject.java:39)

也就是说
obin = new ObjectInputStream(new BufferedInputStream(sock.getInputStream()));
这个语句有问题,问题出在什么地方?该怎么解决呢??
...全文
105 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
superslash 2005-04-20
  • 打赏
  • 举报
回复
mark
kingfish 2005-04-20
  • 打赏
  • 举报
回复
另外,socket这类资源用过后也应该close
kingfish 2005-04-20
  • 打赏
  • 举报
回复
obout.writeObject(test);
obout.close(); //add
MARS.nEIL 2005-04-20
  • 打赏
  • 举报
回复
sock有连接吗?
wangjch 2005-04-20
  • 打赏
  • 举报
回复
obout.close(); //add
通过了,但是为什么要这个呢?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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