Java-对象的序列化和反序列化
来源:互联网 发布:linux强制退出vi 编辑:程序博客网 时间:2024/06/01 21:37
/*
* 对象的序列化和对象的反序列化:
*1、 对象的序列化:把对象以流的方式写入到文件中保存
*2、 对象的反序列化:把文件中保存的对象,以流的方式读取出来
*/
/*
* 对象的反序列化:把文件中保存的对象,以流的方式读取出来
* java.io.ObjectInputStream类 继承InputStream
*
* 构造方法:
* ObjectInputStream(InputStream in) 构造方法中需要传入字节输入流的子类对象
*
* 成员方法:
* Object readObject() 从 ObjectInputStream 读取对象。
*
* 操作流程:
* 1.创建FileInputStream对象,并且绑定数据源
* 2.创建ObjectInputStream对象,构造方法中传入FileInputStream对象
* 3.调用ObjectInputStream中读取对象的方法,重文件中读取对象
* 4.释放资源
* 5.打印对象
*
* 注意:反序列化的前提必须有对象的.class文件,如果没有则抛出ClassNotFoundException
*/
private static void readObject() throws IOException, ClassNotFoundException {
//1.创建FileInputStream对象,并且绑定数据源
FileInputStream fis = new FileInputStream("person.txt");
//2.创建ObjectInputStream对象,构造方法中传入FileInputStream对象
ObjectInputStream ois = new ObjectInputStream(fis);
//3.调用ObjectInputStream中读取对象的方法,重文件中读取对象
Object obj = ois.readObject();
ois.close();
//5.打印对象
System.out.println(obj);
}
/*
* 对象的序列化:把对象以流的方式写入到文件中保存
* java.io.ObjectOutputStream类 继承 OutputStream
*
* 构造方法:
* ObjectOutputStream(OutputStream out) 构造方法中需要传入字节输出流的子类对象
*
* 成员方法:
* void writeObject(Object obj) 将指定的对象写入 ObjectOutputStream。
*
* 操作流程:
* 1.创建FileOutputStream对象,绑定数据目的地
* 2.创建ObjectOutputStream对象,构造方法中传入FileOutputStream
* 3.创建Person对象,并赋值
* 4.调用ObjectOutputStream对象中写对象的方法,把对象写入到文件中
* 5.释放资源
*
*/
private static void writeObject() throws IOException {
//1.创建FileOutputStream对象,绑定数据目的地
FileOutputStream fos = new FileOutputStream("person.txt");
//2.创建ObjectOutputStream对象,构造方法中传入FileOutputStream
ObjectOutputStream oos = new ObjectOutputStream(fos);
//3.创建Person对象,并赋值
Person p = new Person("张三", 20);
//4.调用ObjectOutputStream对象中写对象的方法,把对象写入到文件中
oos.writeObject(p);
//5.释放资源
oos.close();
}
对象Person
/*
* 类创建的对象想要实现序列化和反序列化,必须实现接口Serializable
* Serializable接口中没有抽象方法,也无需重写
* 不包含抽象方法的接口称之为标记型接口,作用就是起到标记作用
* 意义:做序列化和反序列化的时候,JVM会检测,该类实现了Serializable接口不会抛异常
* 做序列化和反序列化的时候,JVM会检测,该类没有实现了Serializable接口会抛出异常NotSerializableException
*
* java.lang 接口 Cloneable-->标记型接口
* 如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。
*
*
* 静态的成员变量属于类,不属于对象,序列化的是对象和静态没关系,所以静态的属性不能序列化
* 保存的age是0,因为0是整数的默认值
*
* 瞬态关键字:transient
* 作用:阻止成员变量序列化,只能用来修饰成员变量
*
* 自定义序列号,不管类是否发生修改,序列号都不会改变
*/
public class Person implements Serializable {
// 自定义序列号,不管类是否发生修改,序列号都不会改变
private static final long serialVersionUID = 12345L;
private String name;
// private /*static*/ int age;
public/* transient */int age;
。。。
}
- java对象的序列化和反序列化
- Java对象的序列化和反序列化
- Java对象的序列化和反序列化
- Java对象的序列化和反序列化实践
- Java对象的序列化和反序列化
- Java对象的序列化和反序列化
- Java对象的序列化和反序列化实践
- Java对象的序列化和反序列化实践
- Java对象的序列化和反序列化实践
- java对象的序列化和反序列化
- [Java] 对象的序列化和反序列化
- java对象的序列化和反序列化
- Java对象的序列化和反序列化
- 浅谈Java对象的序列化和反序列化
- Java对象的序列化和反序列化实践
- Java对象的序列化和反序列化实践
- 【Java SE】对象的序列化和反序列化
- Java对象的序列化和反序列化实践
- java 输入一个正整数,然后显示从0-该数字为止表示所有的数字
- hdu 1281 棋盘游戏
- 马虎的算式
- HBase Rowkey热点问题
- span 换行/不换行-解决
- Java-对象的序列化和反序列化
- JavaScript -arguments、caller 和 callee
- bzoj2049: [Sdoi2008]Cave 洞穴勘测(lct)
- dyld: Library not loaded: @rpath/XCTest.framework/XCTest Referenced from: /var/containers/Bundle/A
- 数据结构与算法之高级排序(希尔/堆)<十一>
- 轻松解决 atibtmon.exe runtime error 问题
- maven中报错:Failure to transfer org.apache.maven.plugins(pom.xml)文件中第一行报错
- 关于swift中的循环遍历
- Android Banner效果简单实现