java中的对象流[53]
文章目录
- java中的对象流[53]
- 一、对象流概述
- 二、代码演示
- 1.实体类
- 2.对象字节输入流
- 3.对象字节输出流
- 三.小结
一、对象流概述
对象流:
1.ObjectOutputStream:将java对象的基本数据类型和图形写入OutputStream字节输出流;
2.ObjectInputStream:对以前使用ObjectOutputStream写入的基本数据和对象进行反序列化
序列化一组对象:把对象写入到输出流中,用来存储或传输,同时序列化多个对象时,反序列化也必须按顺序操作,可使用对象数组的形式,因为对象数组可向object进行转型;
序列化就是将对象写入文件,实际写入的是类名,属性名,属性类型,属性值等;
反序列化:就是从输入流中读取对象;从文件中把对象读取出来,还原成对象;如果一个类创建的对象,需要序列化,那么该类必须实现Serializable接口,该接口没有定义,是标记接口,告诉jvm虚拟机该对象可别序列化;
关键字:transient:声明一个实例变量,当对象被序列化存储时,它的值不需要被保存.
什么时候需要序列化对象?
1.把对象保存到文件中(存储到物理介质);
2.对象要在网络上传输;
二、代码演示
1.实体类
class Dog implements Serializable {
private String name;
private int age;
private transient int id;//序列化时该值会被忽略
public Dog(String n,int a,int i){
this.name=n;
this.age=a;
this.id=i;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
", id=" + id +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.对象字节输入流
private static void InObj(){
File file=new File("D:/files/Dog.txt");
//创建一个空的对象数组
Dog[] dogs=null;
try {
//字节输入流
InputStream is=new FileInputStream(file);
//对象字节输入流
ObjectInputStream ois=new ObjectInputStream(is);
//使用对象数组接收对象字节输入流的内容
dogs=(Dog[]) ois.readObject();
ois.close();
System.out.println(Arrays.toString(dogs));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
3.对象字节输出流
private static void OutObj(){
//指定输出文件,没有则默认创建
File file=new File("D:/files/Dog.txt");
//创建一个对象数组
Dog[] dogs={new Dog("111",2,1),new Dog("222",3,2),new Dog("333",4,3)};
Dog[] dogs2={new Dog("佳佳2",2,1),new Dog("贝贝2",3,2),new Dog("艳艳2",4,3)};
try {
//字节输出流
OutputStream opp=new FileOutputStream(file,true);
//对象字节输出流
ObjectOutputStream oos=new ObjectOutputStream(opp);
//对象字节输出内容到文件
oos.writeObject(dogs2);
oos.writeObject(dogs);
//关闭对象输出流
oos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
三.小结
本章概述并演示了java中的对象流,在之后处理对象类型数据时,就可以使用对象流来写入读取数据.