对象流:很明显就是操作对象的,一般特征就是会有一个对象类例如 Student People
ObjectInputStream
ObjectOutputStream
一点小解释:因为我们不可能一条一条信息的读,因此把student对象放到了集合arraylist里面
下面例如代码:
一个Student学生类:
/**
*
- @author dch
*/
//定义一个学生对象类
public class Student implements Serializable{
//编号
private int id;
//姓名
private String name;
//年级
private int age;
//无参构造器
public Student(){
}
//有参构造器
public Student(int id,String name, int age ){
this.id = id;
this.name = name;
this.age = age;
}
//设置get/set方法
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 getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写toString方法
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
/**
*
- @author dch
*/
//对象的序列化和反序列化
public class TestObject {
/**
* 在之前可以对字节操作(InputStream/OutputStream)
* 字符操作(Reader/Writer)
* java的数据类型操作(DataInputStream/DataOutputStream)
*
* 序列化:对java对象(Student的对象,集合的对象等)的操作
*
* 序列化:将内存中的对象(电脑控制台)保存到磁盘的文件中,(写出 output)
* 或者在网络传输中,将对象A通过序列化从服务单传输到客户单独
* 实现序列化的类: ObjectOutputStream
*
* 反序列:将磁盘文件的数据读入到内存的过程,(也就是从文件读到电脑控制器中) 读入Input
* 实现反序列化的类: ObjectInputStream
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//writeStudent();
readStudent();
}
public static void writeStudent() throws Exception{
//写出文件.从电脑控制台 到 文件夹
List<Student> arraylist = new ArrayList<Student>();
Student stu1 = new Student(001, "杜", 22);
Student stu2 = new Student(002, "李", 21);
arraylist.add(stu1);
arraylist.add(stu2);
OutputStream os = new FileOutputStream("d://测试文件夹/aa/aa.txt");
//对象的序列化
ObjectOutputStream oos = new ObjectOutputStream(os);
//创建对
oos.writeObject(arraylist);
//记着这是规则,流 正着写,反着关.
System.out.println("序列化完成");
oos.close();
os.close();
}
public static void readStudent() throws Exception{
List<Student> arraylist = new ArrayList<Student>();
Student stu1 = new Student(001, "杜", 22);
Student stu2 = new Student(002, "李", 21);
arraylist.add(stu1);
arraylist.add(stu2);
//反序列化 将文件中的对象 读入到 内存中 (也就是从文件到电脑控制器)
//输入流
InputStream is = new FileInputStream("d://测试文件夹/aa/aa.txt");
//对象的反序列
ObjectInputStream ois = new ObjectInputStream(is);
/*Object obj = ois.readObject();
//判断当前读入的对象 是否为Student
if(obj instanceof Student){
Student stu=(Student)obj;
System.out.println(stu);
}*/
Object obj = ois.readObject();
if(obj instanceof List){
arraylist = (List<Student>)obj;
System.out.println(arraylist);
}
System.out.println("文件到电脑控制台输出成功");
ois.close();
is.close();
//存一个对象的读写
//存多个对象的读写,通过集合
}
}