有一个需求,需要将爬虫得到的新闻存放在本地文件夹下,然后将文件夹拷贝到另一台电脑,将新闻存在数据库里。我想到的是java的序列化与反序列化。
什么是序列化与反序列化呢?序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列也更便于网络运输和传播,简单理解就是,序列化:把Java对象转换为字节序列;反序列化:把字节序列恢复为原先的Java对象。
举个例子,假如我要把一个student对象存在文件里。先定义一个Student类,必须要实现Serializable接口。
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Student(String nameString, int age) {
this.name = nameString;
this.age = age;
}
public String getNameString() {
return name;
}
public void setNameString(String nameString) {
this.name = nameString;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
然后写个方法将对象序列化存进Student.txt文件里
public class WriteObjcect {
public static void main(String[] args) {
try {
ObjectOutputStream ooStream = new ObjectOutputStream(new FileOutputStream("Student.txt"));
Student student = new Student("张三", 24);
ooStream.writeObject(student);
ooStream.close();
System.out.println("对象序列化成功");
} catch (Exception e) {
}
}
}
执行成功后可以看到在项目同级目录下,生成了Student.txt文件,现在反序列化读取txt文件
public class ReadObject {
public static void main(String[] args) {
ObjectInputStream objectInputStream;
try {
objectInputStream = new ObjectInputStream( new FileInputStream( new File("Student.txt") ) );
Student student = (Student) objectInputStream.readObject();
objectInputStream.close();
System.out.println("反序列化结果为:"+student);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在控制台可以看到打印的结果