Java序列化流详解
Java序列化流详解
1、序列化
将对象以流的方式写入到要保存的文件中,叫写对象,也叫对象的序列化;
2、反序列化
将文件中保存的对象以流的方式读取出来,叫读对象,也叫对象的反序列化;
、图解
1、简介
作用:将对象以流的方式写入到要保存的文件中,叫写对象,也叫对象的序列化;
2、构造方法
ObjectOutputStream(OutputStream out)
创建写入指定 OutputStream 的 ObjectOutputStream;
参数说明:
OutputStream out:字节输出流;
、特有的成员方法
void writeObject(Object object)将指定的对象写入ObjectOutputStream;
4、使用步骤
①创建ObjectOutputStream对象,传入字节输出流;
②使用ObjectOutputStream中的writeObject方法,把对象写入到文件中;
③释放资源;
但是,只有这些是不对的!
序列化和反序列化会抛出otSerializableException(没有序列化)异常;
类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。、
说明:
Serializable接口也叫标记型接口:要进行序列化和反序列化的类,通过实现这个接口,获得一个标记,当类进行序列化或者反序列化操作时若有此标记则可以进行序列化或者反序列化,若没有这个标记,则会报otSerializableException(没有序列化)异常,
5、代码演示
Persion类:
代码语言:javascript代码运行次数:0运行复制package study.io;
import java.io.Serializable;
public class Persion implements Serializable {
private String name;
private int age;
public Persion() {
}
public Persion(String name, int age) {
= name;
this.age = age;
}
@Override
public String toString() {
return "Persion{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getame() {
return name;
}
public void setame(String name) {
= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
代码:
代码语言:javascript代码运行次数:0运行复制package study.io;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamTest {
public static void main(String[] args) throws IOException {
//①创建ObjectOutputStream对象,传入字节输出流;
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\"));
//②使用ObjectOutputStream中的writeObject方法,把对象写入到文件中;
Persion p1 = new Persion("大哥",20);
Persion p2 = new Persion("二哥",18);
objectOutputStream.writeObject(p1);
objectOutputStream.writeObject(p2);
//③释放资源;
();
}
}
运行结果:
1、简介
将文件中保存的对象以流的方式读取出来,叫读对象,也叫对象的反序列化;
2、构造方法
ObjectInputStream(InputStream in)
创建从指定 InputStream 读取的 ObjectInputStream;
参数说明:
InputStream in:字节输入流;
、特有成员方法
Object readObject():
从ObjectInputStream读取对象;
4、使用步骤
①创建ObjectInputStream对象,构造方法中传入字节输入流;
②使用ObjectInputStream中的readObject方法,读取文件中保存的对象;
③释放资源;
④使用读取出来的对象(打印);
备注:有可能出现的异常ClassotFoundException
所以使用反序列化的两个前提:
①类必须实现Serializable接口;
②必须存在对应的class文件;
5、代码演示
代码:
代码语言:javascript代码运行次数:0运行复制package study.io;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ObjectInputStreamTest {
public static void main(String[] args) throws IOException, ClassotFoundException {
//①创建ObjectInputStream对象,构造方法中传入字节输入流;
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("C:\\Users\\Administrator\\Desktop\\"));
//②使用ObjectInputStream中的readObject方法,读取文件中保存的对象;
Object object1 = objectInputStream.readObject();//一次读一个对象
Object object2 = objectInputStream.readObject();//一次读一个对象
//③释放资源;
();
//④使用读取出来的对象(打印);
Persion persion1 = (Persion)object1;
Persion persion2 = (Persion)object2;
println(());
println(());
}
}
运行结果:
1、说明
当JVM进行反序列化对象时,能到class文件,但是class文件在序列化对象后发生了修改,那么反序列化操作也会失败,抛出一个InvalidClassException异常,发生这个异常的原因如下:
①该类的序列版号与从流中读取的类描述符的版本号不匹配;
②该类包含未知数据类型;
③该类没有可访问的无参构造方法;
2、图解
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 10 条评论) |
本站网友 华能海门电厂 | 2分钟前 发表 |
把对象写入到文件中; Persion p1 = new Persion("大哥" | |
本站网友 pdf书 | 10分钟前 发表 |
叫写对象 | |
本站网友 半岛晨报电子版 | 26分钟前 发表 |
传入字节输出流; ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("C | |
本站网友 腾讯张军 | 27分钟前 发表 |
则会报otSerializableException(没有序列化)异常 | |
本站网友 金钱草的功效与作用 | 18分钟前 发表 |
当类进行序列化或者反序列化操作时若有此标记则可以进行序列化或者反序列化 | |
本站网友 第三空间 | 12分钟前 发表 |
抛出一个InvalidClassException异常 | |
本站网友 qqc | 16分钟前 发表 |
简介作用:将对象以流的方式写入到要保存的文件中 | |
本站网友 韩国烤肉店 | 10分钟前 发表 |
如有侵权请联系 cloudcommunity@tencent 删除前往查看java对象接口序列化异常 | |
本站网友 12306分流抢票 | 23分钟前 发表 |
ClassotFoundException { //①创建ObjectInputStream对象 |