序列化以及反序列化:
序列化:就是将类中的对象按照流的方式存储到文本文件中或者再网络中传输 对象---->流数据 序列化流 (ObjectOutputStream)
反序列化:将文本文件中的流对象或者网络传输中的流对象还原成对象 流数据--->对象 反序列化流(ObjectInputStream)
当我们去创建一个自定义类来实现它
例如:
先创建一个学生类并且去实现Serializeable接口:
package com.westos.Test;
import java.io.Serializable;
public class Student implements Serializable{
/**
* 序列化ID
*/
private static final long serialVersionUID = 4142798162962014997L;
private String name;
private int 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;
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Student() {
super();
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
在创建一个测试类
package com.westos.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test4 {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
//序列化方法
write();
//反序列化方法
Student student=read();
//通过反序列化方法从文件中读取对象
System.out.println(student.getName()+","+student.getAge());
}
/**
* 创建序列化对象
* @throws IOException
* @throws FileNotFoundException
*/
private static void write() throws FileNotFoundException, IOException {
Student student=new Student("张三",15);
//创建对象输出流,并将Student对象存储到文件中去
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(new File("E:/Student.txt")));
oos.writeObject(student);
System.out.println("Student对象序列化成功!");
oos.close();
}
/**
* 创建反序列化对象
* @throws IOException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
private static Student read() throws FileNotFoundException, IOException, ClassNotFoundException {
//创建对象输入流,并将文件中的数据读取出来
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(new File("E:/Student.txt")));
Student st=(Student) ois.readObject();
System.out.println("Student对象反序列化对象成功!");
return st;
}
}
Properties:属性集合类
Properties:表示了一个持久的属性集(简称:属性集合类) extends Hashtable<K,V> Map集合的
可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
public Properties():无参构造
我们先用Map集合的功能区遍历数组中的元素:
例如:
package com.westos.Properties;
import java.util.Properties;
import java.util.Set;
public class PropertiseDome {
public static void main(String[] args) {
//创建属性集合类对象,该类是继承了Hashtable集合,所以可以调用Map集合的功能
Properties pro=new Properties();
//添加元素
pro.put("迪丽热巴",25 );
pro.put("吴宣仪",25 );
pro.put("孟美岐",23 );
System.out.println(pro);
System.out.println("---------------------");
//获取集合中的所有的键
Set<Object> keySet = pro.keySet();
//遍历集合元素
for(Object key:keySet) {
//获取集合中键对应的值
Object value = pro.get(key);
System.out.println(key+"="+value);
}
}
}
运行结果:
{孟美岐=23, 吴宣仪=25, 迪丽热巴=25}
---------------------
孟美岐=23
吴宣仪=25
迪丽热巴=25
接下来让我们看看properties类的特有方法:
属性集合类的特有功能:
public Object setProperty(String key, String value) :给属性列表中添加键和值,并且强制都使用String
public Set<String> stringPropertyNames():遍历的功能
public String getProperty(String key)用指定的键在此属性列表中搜索属性
例如:
package com.westos.Properties;
import java.util.Properties;
import java.util.Set;
public class PropertiesDome2 {
public static void main(String[] args) {
//创建属性集合类对象
Properties pro=new Properties();
//添加元素:public Object setProperty(String key, String value) :给属性列表中添加键和值,并且强制都使用String
pro.setProperty("张三", "21");
pro.setProperty("李四", "23");
pro.setProperty("王五", "25");
System.out.println(pro);
System.out.println("-------------------");
//遍历元素
Set<String> keyset = pro.stringPropertyNames();
for(String key:keyset) {
String value = pro.getProperty(key);
System.out.println(key+"="+value);
}
}
}
运行结果:
{王五=25, 张三=21, 李四=23}
-------------------
王五=25
张三=21
李四=23
属性集合类中与流相关的方法:
可保存在流中或从流中加载,只能使用属性集合类
public void store(Writer writer,String comments):把集合中的数据保存文本文件中(属性集合)
public void load(Reader reader):将文本文件中的数据加载到属性集合中
例如:
package com.westos.Properties;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
public class propertiesDome4 {
public static void main(String[] args) throws IOException {
//创建一个属性集合类对象
Properties pro=new Properties();
//创建一个字符缓冲输入流
BufferedReader br=new BufferedReader(new FileReader("oos.txt"));
//将流中的元素添加到属性集合类中
pro.load(br);
//关闭资源
br.close();
System.out.println(pro);
System.out.println("-------------------");
//创建一个字符缓冲输出流对象
BufferedWriter bw=new BufferedWriter(new FileWriter("file.txt"));
//使用该方法将集合类中的键值对添加到指定文本中去
pro.store(bw, "name'content");
//关闭资源
bw.close();
}
}