序列化和反序列化的概述
序列化就是写:对象以流的方式写入叫序列化
反序列化就是读:文件中对象以流的方式读取叫反序列化
只不过上述针对的是对象
对象的序列化流
创个一个实例类Person用来进行序列化
public class Person implements Serializable {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
主程序
import java.io.*;
public class t1 {
public static void main(String[] args) throws IOException {
//1.
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("dd.txt"));
//2.
objectOutputStream.writeObject(new Person("小美女",18));
//3.
objectOutputStream.close();
}
}
对象的反序列化流
import java.io.*;
public class t1 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("dd.txt"));
Object readObject = objectInputStream.readObject();
objectInputStream.close();
System.out.println(readObject);
}
}
transient关键字
序列号冲突异常InvaildClassException异常
序列化集合
创建一个Person类对象用于主程序创建对象放入集合
package test.code.src.cn.itcast.day11.demo08;
import java.io.Serializable;
public class Person implements Serializable {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
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;
}
}
主程序
import java.io.*;
import java.util.ArrayList;
public class t1 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//1.
ArrayList<Person> arrayList = new ArrayList<>();
//2.
arrayList.add(new Person("小美",18));
//3.
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("d.txt"));
//4.
outputStream.writeObject(arrayList);
//5.
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("d.txt"));
//6.
Object readObject = inputStream.readObject();
ArrayList<Person> readObject1 = (ArrayList<Person>) readObject;
for (Person person : readObject1) {
System.out.println(person);
}
outputStream.close();
inputStream.close();
}
}
打印流
使用场景:
能够实现更多种的输出目的
import java.io.FileNotFoundException;
import java.io.PrintStream;
public class t1 {
public static void main(String[] args) throws FileNotFoundException {
PrintStream printStream = new PrintStream("输出目的地.txt");
printStream.write(97);
//特有方法
printStream.println(88);
printStream.println(8.8);
printStream.close();
}
}
import java.io.FileNotFoundException;
import java.io.PrintStream;
public class t1 {
public static void main(String[] args) throws FileNotFoundException {
System.out.println("我是在控制台输出");
PrintStream printStream = new PrintStream("打印流的目的地.txt");
System.setOut(printStream);
System.out.println("我在打印流的目的地中输出");
printStream.close();
}
}