ObjectOutputStream和ObjectInputStream
来源:互联网 发布:原创设计的衣服淘宝店 编辑:程序博客网 时间:2024/05/26 12:07
对象流,是一组高级流。特点:可以方便的读写java中的任何对象。
* OOS:对象输出流,可以将给定的对象转换为一组字节然后写出。
* OIS:对象输入流,可以将读取回来的一组字节转换为对应的对象。前提是,读取的字节必须是由OOS将对象转换的那一组字节才可以。
例1:先建一个person类:
package day02;import java.io.Serializable;import java.util.List;/** * 用来测试对象流读写对象使用 */public class Person implements Serializable{ /** * 版本号的作用:版本号影响着反序列化的结果。 * 当我们需要反序列一个之前序列化的对象时: * 若该对象的类内容发生了修改,在反序列化时,OIS会检查之前的对象版本与现在类的版本是否一致: * 1:一致,那么启用兼容模式。现在类中的属性在之前对象上有的,就使用,没有的就忽略。现在类新的属性,原来对象中没有的,就使用默认值。 * 2:不一致,readObject方法会直接抛出异常。反序列化失败。 * transient英 [ˈtrænziənt] adj.短暂的;临时的; * transient是类型修饰符,只能用来修饰字段。在对象序列化的过程中,标记为transient的变量不会被序列化。 */ private static final long serialVersionUID = 1L; private String name; private int age; private String gender; private transient List<String> otherInfo;//transient是类型修饰符,只能用来修饰字段。在对象序列化的过程中,标记为transient的变量不会被序列化。 public Person(){} public Person(String name, int age, String gender, List<String> otherInfo) { super(); this.name = name;this.age = age;this.gender = gender;this.otherInfo = otherInfo; } public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getGender() {return gender;} public void setGender(String gender) {this.gender = gender;} public String getName() {return name;} public void setName(String name) {this.name = name;} public List<String> getOtherInfo() {return otherInfo;} public void setOtherInfo(List<String> otherInfo) {this.otherInfo = otherInfo;} public String toString(){return name+","+age+","+gender+","+otherInfo;}}
在新建oos将对象写到person.obj:
package day02;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.util.ArrayList;import java.util.List;/** * 对象流,是一组高级流。特点:可以方便的读写java中的任何对象。 * OOS:对象输出流,可以将给定的对象转换为一组字节然后写出。 * OIS:对象输入流,可以将读取回来的一组字节转换为对应的对象。前提是,读取的字节必须是由OOS将对象转换的那一组字节才可以。 * @author Administrator * */public class OOSDemo { public static void main(String[] args) throws IOException { Person p = new Person(); p.setName("苍老师"); p.setAge(30); p.setGender("女"); List<String> otherInfo= new ArrayList<String>(); otherInfo.add("写大字"); otherInfo.add("唱歌"); otherInfo.add("拍电影"); p.setOtherInfo(otherInfo); System.out.println(p); /* * 将Person对象写入文件 * 若想将对象写入文件,需要先将对象转换为一组对应的字节才能写出。这时我们就可以使用高级流ObjectOutputStream了 * * 分工: * 使用FileOutputStream将字节写入文件。 * 使用ObjectOutputStream将Person对象转换为字节。 * 若使用OOS处理FOS。就可以叠加效果为:将Person对象通过OOS转换为对应的字节,然后再通过FOS将这些字节写入到文件中。 */ //创建用于向文件中写入字节的FOS /* * 数据通过FOS写入文件(硬盘上)做长久保存的过程称为:持久化 */ FileOutputStream fos= new FileOutputStream("person.obj"); //创建OOS用于将给定对象转换为字节写出 /* * 将一个数据结果转换为一组字节的过程称为:序列化.将一个对象转换为一组字节的过程称为:对象序列化。 */ ObjectOutputStream oos= new ObjectOutputStream(fos); /* * OOS提供了一个独有的方法writeObject(Object obj)该方法可以将给定的对象转换为一组字节然后写出。 * */ oos.writeObject(p); oos.close(); }}
输出结果:
苍老师,30,女,[写大字, 唱歌, 拍电影]
然后新建OIS读取对象:
package day02;import java.io.FileInputStream;import java.io.IOException;import java.io.ObjectInputStream;/** * java.io.ObjectInputStream用于读取一组字节,然后转换为对应的对象。 * 将字节转换为数据结构的过程称为:反序列化;这里就是进行对象的反序列化 * 读写对象的目的一般有两个: * 1:保存对象 * 2:传输对象 */public class OISDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { //创建读取文件的字节输入流 FileInputStream fis= new FileInputStream("person.obj"); //创建用于反序列化对象的对象输入流 ObjectInputStream ois= new ObjectInputStream(fis); /* * Object readObject()读取若干字节并转换为对应的对象 */ Person p = (Person)ois.readObject(); System.out.println(p); ois.close(); }}
输出结果:
苍老师,30,女,null因为transient是类型修饰符,只能用来修饰字段。在对象序列化的过程中,标记为transient的变量不会被序列化。
0 0
- ObjectInputStream和ObjectOutputStream
- ObjectInputStream和ObjectOutputStream
- ObjectOutputStream和ObjectInputStream
- ObjectInputStream和ObjectOutputStream
- ObjectOutputStream和ObjectInputStream
- Java ObjectInputStream 和 ObjectOutputStream
- ObjectOutputStream和ObjectInputStream
- ObjectInputStream和ObjectOutputStream类
- 有关ObjectInputStream和ObjectOutputStream性能
- ObjectOutputStream 和 ObjectInputStream的使用
- Java IO ObjectInputStream和ObjectOutputStream
- 对象流(ObjectOutputStream 和 ObjectInputStream)
- ObjectInputStream ObjectOutputStream
- ObjectInputStream ObjectOutputStream
- ObjectOutputStream/ObjectInputStream
- ObjectInputStream & ObjectOutputStream
- ObjectOutputStream/ObjectInputStream
- JAVA IO系列----ObjectInputStream和ObjectOutputStream类
- 用canvas写贪吃蛇
- Error: A library uses the same package分析和处理
- 软件开发项目流程
- 内存管理之memblock
- 4730: Alice和Bob又在玩游戏
- ObjectOutputStream和ObjectInputStream
- lua 运算符
- Codeforces 253D-Table with Letters
- 算法分析学习1
- KNN(一)--简单KNN原理及实现
- JAVA8 十大新特性详解
- 安卓SharedPreferences封装类,超好用
- 进程的内存映射
- 网页渲染流程