序列化对象遇到的问题...
刚学序列化,写了一个通过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()));
这个语句有问题,问题出在什么地方?该怎么解决呢??