• Java自学笔记(20):【IO】对象流


    对象的序列化和反序列化

    把对象转换为字节序列的过程称为对象的序列化,Serialization           //保存对象状态并可再次读取

    把字节序列恢复为对象的过程称为对象的反序列化,Deserialization    

    应用:  把对象字节序列永久保存到硬盘上,在网络上传送对象的字节序列,通过序列化在进程中传递对象

    只有实现了Serializable和Externalizable接口的类的对象才能被序列化

    Serializable接口是一个标记接口                  Public interface Serializable{    }

    Externalizable接口继承自Serializable

    对象输出流

    ObjectOutputStream类用于对象的序列化,即将对象输出

    //Person.java
    package object;
    
    import java.io.Serializable;
    
    public class Person implements Serializable {  //序列化
        /**
         * 
         */
        private static final long serialVersionUID = 1L;  //序列化的ID标识
        public String name;
        public int age;
    }
    //ObjectOutputStreamDemo
    package object;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    
    public class ObjectOutputStreamDemo {
    
        public static void main(String[] args) {
            File file = new File("Person.txt");
            try {
                FileOutputStream fos = new FileOutputStream(file);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                Person person = new Person();
                person.name= "tkj";
                person.age=17;
                oos.writeObject(person);
                oos.close();
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }    
             catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    对象输入流

    ObjectInputStream

    package object;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    
    public class ObjectOutputStreamDemo {
    
        public static void main(String[] args) {   //读取刚刚的Person
            File file = new File("Person.txt");
            try {
                FileOutputStream fos = new FileOutputStream(file);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                Person person = new Person();
                person.name= "tkj";
                person.age=17;
                oos.writeObject(person);
                oos.close();
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }    
             catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    transient关键字:用来表示一个域不是对象序列化的一部分,被修饰的变量不会被序列化,static也有这样的作用


    好难啊~~


  • 相关阅读:
    Eclipse添加Android library错误的原因
    The primitive Java types
    TFS怎么查找一个用户提交的所有代码
    easyui tabs
    错误 CS0012 类型“xxx”在未引用的程序集中定义。必须添加对程序集“xxxx xxxxx”的引用
    Sql Server 列转逗号隔开的字符串 和 逆转
    DataTable程序分页 不推荐。
    EF执行存储过程并且返回DataSet
    EF运用成ADO.NET操作返回DataSet或者DataTable
    Sql 查询 表名 视图名称等
  • 原文地址:https://www.cnblogs.com/tkj521Ya/p/11287848.html
Copyright © 2020-2023  润新知