序列化和反序列化
是对象到文件或者文件到对象的转换形式(以字节转换)
序列化流ObjectOuputStream
反序列化是把文件中的一个对象数据,以字节的形式读取出来,转成对象,存到内存中。
使用场景:当在网络之间需要传输对象时。
1.序列化流ObjectOuputStream
1.被序列化的类需要实现Serializable接口
2.并且给该类添加一个标记id
3.使用ObjectOuputStream的writeObject方法进行序列化。
//实现Serivalizble接口
public class Person implements Serializable {
//创建一个序列化版本标记
private static final long serivalVersionUID = 1L;
}
------------------------------------------------------------------
//创建一个Person对象
Person p = new Person();
//创建一个OutputStream流
OutputStream os = new FileOutputStream("a.txt");
//创建一个ObjectOutputStream对象,将os传入
ObjectOutputStream oos = new ObjectOutputStream(os);
//将对象写入文件
oos.writeObject(p);
oos.close();
os.close();
反序列化流ObjectInputStream
//创建一个InputStream流
InputStream is = new FileInputStream("a.txt");
//创建反序列化ObjectInputStream流,并传入fis
ObjectInputStream ois = new ObjectInputStream(is);
//调用反序列化方法
Person p =(Person)ois.readObject();
ois.close();
is.close();
瞬态关键字
transient写在属性前,该属性不会被序列化。
打印流PrintWriter/PrintStream
是用来打印数据的,可以把数据打印到控制台或文件中。
//创建一个FileWriter对象
FileWriter fw = new FileWriter("a.txt");
//创建一个PrintWriter对象并且传入一个Writer对象
PrintWriter pw = new PrintWriter(fw);
pw.print("异常信息");
Properties类
是一个持久的属性集,可以从流中加载或保存。
1.Hashtable的子类.
2.该集合没有泛型
3.是一个可持久化的属性集
//创建Properties对象,存储从文件中读取的键值对
Properties pro = new Properties();
FileInputStream fis = new FileInputStream("a.properties");
//调用加载方法,传入一个InputStream流
pro.load(fis);
//获取文件中对应key的属性值
pro.getProperty("username");
//向集合中添加键值对
pro.setProperty("driverClass","com.mysql.jdbc.Driver");
//遍历集合
Set<Object> objList = pro.keySet();
for (Object obj:objList){
String str = (String)obj;
System.out.println(str+pro.getProperty(str));
}
//将Properties中的键值对存到文件中
OutputStream os = new FileOutputStream("a.properties");
pro.store(os,"这是备注");
os.close();
fis.close();