1).序列化
把对象转化为字节序列,这个过程称之为对象序列化
与之相反的称之为反序列化。
2)用ObjectOutputStream类对象的时候,必须要进行序列化(序列化在实体类中实现)
<1>.ObjectOutputStream 对象的序列化,通过java.io.Serializable接口实现序列化,如果不序列化则会报NotSerializableException
<2>.ObjectInputStream 对象的反序列化,对于反序列化过程中,固定版本号,便于反序列化。示例:private static final long serialVersionUID = 1L;
示例:cn.lf.day0901.User和cn.lf.day0901.UserObjectOutputStreamDemo1;
ObjectInputStream和ObjectInputStream类创建的对象被称为对象输入流和对象输出流。
创建文件输出流代码:
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
创建文件输入流代码:
FileInputStream fis = new FileInputStream( file);
ObjectInputStream ois = new ObjectInputStream(fis);
实体类User
package cn.lf.day0901;
import java.io.Serializable;
//实体类序列化:实现Serializable接口
public class User implements Serializable{
/**
* 当前版本号
*/
private static final long serialVersionUID = 6207704988510402742L;
private String name; //姓名
private int age; //年龄
private String userName; //用户名
private String userPassword; //用户密码
private double salary; //薪水
public User(String name, int age, String userName, String userPassword, double salary) {
super();
this.name = name;
this.age = age;
this.userName = userName;
this.userPassword = userPassword;
this.salary = salary;
}
public User() {
super();
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", userName=" + userName + ", userPassword=" + userPassword
+ ", salary=" + salary + "]";
}
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 String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
测试类UserObjectOutputStreamDemo1
package cn.lf.day0901;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import org.junit.Test;
public class UserObjectOutputStreamDemo1 {
@Test
public void testName() throws IOException, ClassNotFoundException{
File file = new File("./test/obj.txt"); //在当前工程目录下创建文件obj.txt
if (!file.exists()) {
file.createNewFile(); //创建文件
}
User user = new User();
user.setName("胡一刀");
user.setAge(45);
user.setSalary(4500);
user.setUserName("admin");
user.setUserPassword("124356");
//writeToObjectOutputStream(file, user);
User readUser = readToObjectInputStream(file);
System.out.println(readUser);
}
//写文件
//用ObjectOutputStream类对象的时候,必须要进行序列化(序列化在实体类中实现)
public void writeToObjectOutputStream(File file,User user) throws IOException {
//创建文件输出流
FileOutputStream fos = new FileOutputStream(file);
//创建object输出流
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(user);
oos.flush();
oos.close();
}
//读文件
public User readToObjectInputStream(File file) throws IOException, ClassNotFoundException{
User user = null;
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
user = (User)ois.readObject();
return user;
}
}