1 . 暂态:(transient)当对象输出流往文件写入对象,此对象则不会保留属性值,为默认值.
2 . 序列化的版本号
private static final long serialVersionUID = 1L;
3 .当使用对象输出流向文件写入数据的时候,如果写入的是字符串,则读取的时候要严格按照写入顺序进行读取.写入的对象用存进类对象,写入的字符串读出来存进字符串.要对应
4 .
Student类
package com.qf.demo;
import java.io.Serializable;
public class Student
implements Serializable// 实现序列化的就接口 , 就不会报 not Serializable Exception
{
/**
* 序列化的版本号
*/
private static final long serialVersionUID = 1L;
private int id;
private String name;
private transient int grade;// transient 暂态 当用对象输出流 写对象 此属性 则不会保存 属性值
static int classNumber;
public Student(int id, String name, int grade,int classNumber) {
super();
this.id = id;
this.name = name;
this.grade = grade;
this.classNumber = classNumber;
}
public Student() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", grade=" + grade + ",classNumber = "+classNumber+"]";
}
public void show(){
System.out.println(id+" "+name+" "+grade);
}
}
package com.qf.demo;
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;
import java.util.Arrays;
/**
* objectoutputstream 可以写任意类型对象
*
* 读取过程一定要严格按照写入的顺序读取
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
Student student = new Student(1, "zhagnsan", 30,1);
Student student2 = new Student(2, "zhagnsan2", 40,3);
Student student3 = new Student(3, "zhagnsan3", 50,5);
Student student4 = new Student(4, "zhagnsan4", 60,7);
// 要存储
// 因为要存储的是对象 , 所以用对象流
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("students.txt")));
// 要通过 oos 把对象写到 students.txt里面
// 用对象流 写 对象 对象必须被序列化了
oos.writeObject(student);
oos.writeBytes("abcde");
oos.writeObject(student2);
oos.writeObject(student3);
oos.writeObject(student4);
oos.flush();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("students.txt")));
Object object = ois.readObject();// 读取时按照存入的顺序读取的
System.out.println(object);
byte[] buf = new byte[5];
ois.read(buf, 0, buf.length);// 必须先把 String 读取出来以后 才能载接着读 下一个stuent对象
System.out.println(Arrays.toString(buf));
Object object2 = ois.readObject();
if(object2 instanceof Student){
Student student5 = (Student) object2;
System.out.println(student5);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}