- 对象序列化(write out)
- 把对象序列化后永久保存到磁盘中,相当于写出的过程,ObjectOutputStream,并且要序列化的类必须实现serializablie;
其中Serializable是一个空接口,作用是当做标志,标志这个类可以被序列化
package Thread_01;
import java.io.Serializable;
public class person implements Serializable {
private String name;
private int age;
@Override
public String toString() {
return super.toString();
}
public person() {
}
public person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package Thread_01;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class main {
public static void main(String[] args) throws IOException {
ObjectOutputStream oStream = new ObjectOutputStream(new FileOutputStream("C:\\Users\\1\\Desktop\\.vs\\c.txt"));
oStream.writeObject(new person("小明", 18));
oStream.close();
}
}
- 对象的反序列化(read in)
读取磁盘中序列化的数据,重新恢复对象
一次反序列化必须跟序列化的UID一致!!即两次操作必须一一对应
每次反序列化时,JVM会拿着之前序列化自动生成的UID相比较,必须一致才能成功,解决方案:
1.两次操作必须一一对应
2.将UID写死,private static final long serialVersionUID = 1L;
package Thread_01;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class main {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectInputStream oiss = new ObjectInputStream(new FileInputStream("C:\\Users\\1\\Desktop\\.vs\\c.txt"));
Object object = oiss.readObject();
oiss.close();
System.out.println(object);
person p = (person) object;
System.out.println(p.getName() + p.getAge());
}
}
- transient关键字
称为瞬态关键字,static修饰的成员变量不能被序列化,transient也不能被序列化,不想成员变量被序列化可以用transient修饰 - 打印流
PrintStream为另一个输出流添加了功能,即能够方便地打印各种数据值的表示。 与 PrintStream从不抛出IOException 。
构造方法:
PrintStream(File file) :使用指定的文件创建一个新的打印流,而不需要自动换行。
PrintStream(OutputStream out) :创建一个新的打印流。
PrintStream(String fileName) :使用指定的文件名创建新的打印流,无需自动换行。
注意:
使用继承自父类的方法write写数据,则查看数据时会查看编码表,如97->a。
用自己特有的print或者println则不会改变,即97->97
package Thread_01;
import java.io.FileNotFoundException;
import java.io.PrintStream;
public class main {
public static void main(String[] args) throws FileNotFoundException {
PrintStream pp = new PrintStream("C:\\Users\\1\\Desktop\\.vs\\b.txt");
System.setOut(pp);
pp.write(97);
pp.println(97);
pp.close();
}
}