声明:内容是在学习过程中的笔记,纯属自嗨留念,欢迎指正
一、对象的序列化(Serializable)
什么是序列化?序列化是指将对象的状态信息转换为可以存储或传输的形式(2进制数据)的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
序列化就是为了能够传送对象而必须要做的处理
序列化的目的:
1)永久的保存对象,保存对象的字节序列到本地文件中;
2)通过序列化对象在网络中传递对象;
3)通过序列化对象在进程间传递对象。
二、用Socket传送对象的简单例子
"transmitData"传送对象的类的包
public class transmitData implements Serializable{
private static final long serialVersionUID=1L;
int data = 1;
public transmitData(){ }
int getdata(){
return data;
}
}
"package Client"部分代码
import transmitData.*;
***(略)
Socket s = new Socket(ip,port);
OutputStream os = s.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
transmitData data = new transmitData();
oos.write(data);
oos.close();
s.close();
"package Sever"部分代码
import transmitData.*;
***(略)
SeverSocket ss(port);
while(true){
Socket s = ss.accept();
InputStream is = s.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
transmitData data = (transmitData)ois.readObject();
data.getdata();
}
***
三、遇到的问题及解决对策抛出了java.io.NotserializableException
cannot cast obj1 to obj2 ,obj1 and obj2 are in umnamed module of loader 'app'
问题一:
把你要传输的类序列化一下就可以了(参考transmitData包)
问题二:
如果把要传输的类分别写在client和sever里面,会导致传输的数据无法被读取,client里面的transmitData无法被sever里面的transmitData所读取,就会导致问题二的发生。只要把传送的类写在client和sever包之外的包里就可以了。
参考