序列化对象遇到的问题...
刚学序列化,写了一个通过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()));
这个语句有问题,问题出在什么地方?该怎么解决呢??
序列化对象:
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()));
这个语句有问题,问题出在什么地方?该怎么解决呢??
...全文
相关推荐
Java 多次序列化对象到同壹個文件及反序列化的问题
NULL 博文链接:https://hanmiao.iteye.com/blog/1740809
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
1.漏洞产生的原因 #### 正常的反序列化语句是这样的 $a=’a:2:{s:8:”username”;s:7:”dimpl3s”;s:8:”password”;s:6:”abcdef”;}’; 但是如果写成这样 $b=’a:2:{s:8:”username”;s:7:”dimpl3s”;s:8:”password”;s:6:”123456″;}s:8:”password”;s:6:”abcde”;}’; 也可以正常的编译, 而且下面一条语句的结果是 password=“123456” 而不是abcde 结果 这就说明一个问题,在反序列化的时候,只要求第一个序列化字符串合法就
Android-Android上的Java对象反序列化
Android上的Java对象反序列化
java 中序列化NotSerializableException问题解决办法
主要介绍了java 中序列化NotSerializableException问题解决办法的相关资料,这里对序列化问题进行描述说明,并提供解决办法,希望能帮助到大家,需要的朋友可以参考下
java对象序列化操作实例分析
主要介绍了java对象序列化操作,结合实例形式分析了java对象序列化操作相关实现步骤与操作注意事项,需要的朋友可以参考下



