zoukankan      html  css  js  c++  java
  • java中的序列化与反序列化,还包括将多个对象序列化到一个文件中

    package Serialize;
    
    /**
     * Created by hu on 2015/11/7.
     */
    //实现序列化必须实现的接口,这就是一个空接口,起到标识的作用
    import java.io.Serializable;
    
    /**
     * 用来进行序列化和反序列化的类
     * */
    public class person implements Serializable {
        private int age;
        private String name;
        private String sex;
        public person(int age, String name, String sex) {
            this.age = age;
            this.name = name;
            this.sex = sex;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        @Override
        public String toString() {
            return "person: name="+name+";sex="+sex+";age="+age;
        }
    }
    **************************************************************
    package Serialize;
    
    import java.io.*;
    
    /**
     * Created by hu on 2015/11/7.
     */
    //序列化和反序列化
    public class demo1 {
        public static void main(String[] args)throws Exception{
            for(int i=0;i<100;i++){
                person pp=new person(i,"hujingwei"+i,"male");
                SerializePerson(pp);
            }
            //反序列化只会序列文件中第一个对象
            person p=DeserializePerson();
            System.out.println(p);
        }
        //序列化方法,将对象写到磁盘上的一个文件上
        public static void SerializePerson(person p)throws IOException{
            /*
            * 如果FileOutputStream的构造函数中没有第二个参数“true”,那么新添加一个对象的时候,会将上一次序列化到文件
            * 中的对象覆盖掉,这种情况下,文件中永远只有一个序列化的对象;将第二个参数设置为“true”的时候,会将每次添加
            * 的对象放在文件的末尾。
            * */
            //ObjectOutputStream对象输出流,将person对象存储到person.txt中,完成对person对象序列化操作
            ObjectOutputStream oo=new ObjectOutputStream(new FileOutputStream(new File("D:/person.txt"),true));
            //将序列化的对象写入到输入流中去
            oo.writeObject(p);
            System.out.println("Serialize person successfully!");
            oo.close();
        }
        //反序列化,将一个对象从磁盘文件中读出来
        public static person DeserializePerson()throws Exception{
            //ObjectInputStream对象输入流,将person对象从文件中读出
            ObjectInputStream oi=new ObjectInputStream(new FileInputStream(new File("D:/person.txt")));
            person p=(person)oi.readObject();
            System.out.println("Deserialize person successfully!");
            return p;
        }
    }
    ********************************************************
    package Serialize;
    
    /**
     * Created by hu on 2015/11/7.
     */
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 序列化和反序列化多个对象
     * */
    public class demo2 {
        public static void main(String[] args)throws Exception{
            Serialize();
            List list=Deserialize();
            for (int i=0;i<list.size();i++){
                person p=(person)list.get(i);
                System.out.println(p);
            }
        }
        //序列化方法
        public static void Serialize() throws Exception{
            //将多个对象保存在一个list中,然后将list当作一个对象存入到文件中(list已经实现了Serializable接口)
            List<person> list= new ArrayList<person>();
            for (int i=0;i<100;i++){
                person p=new person(i,"test"+i,"male");
                list.add(p);
            }
            ObjectOutputStream oo=new ObjectOutputStream(new FileOutputStream(new File("D:/person.txt"),true));
            oo.writeObject(list);
            oo.close();
        }
        //反序列化方法
        public static List Deserialize() throws Exception{
            ObjectInputStream oi=new ObjectInputStream(new FileInputStream(new File("D:/person.txt")));
            List list=(List)oi.readObject();
            return list;
        }
    }
  • 相关阅读:
    应用程序发生异常,未知的软件异常0x0eedfade,位置为0x0000001355C
    关于条件表达式的理解
    *p++、*++p、(*p)++、++(*p)的比较
    排序算法01_选择排序
    递归_汉诺塔问题
    排序算法00_冒泡排序
    深入理解C语言
    虚拟机_第一篇---创建Linux虚拟机
    虚拟机_第〇篇---虚拟机的下载安装与功能简介
    对i++与++i的理解
  • 原文地址:https://www.cnblogs.com/hujingwei/p/4946165.html
Copyright © 2011-2022 走看看