• java中的序列化与反序列化


    序列化就是将一个对象以及他的属性写入一个文件,保存在存中对象的状态

    反序列化就是把保存的对象状态再读出来

    实现序列化与反序列化就要使用到IO操作中文件的字节流输入与输出

    inputStream与outputStream对字节流操作inputStreamReader与outputStreamWrite为字符流操作

    input与output是对于java内存而言的           input输入是由外部----->内存               output输出是内存---->外部

    任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象,我们可以用read()方法将其取出

    任何有能力接收数据源(流)的javaio对象我们就可以看作是一个OutputStream对象,可以用write()方法接受

    字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的,Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点
    1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
    2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以

    字节流与字符流:http://blog.csdn.net/zxman660/article/details/7875799
    序列化分三步

    1.创建FileOutputStream 对象,file是一个File类的对象

      File file = new File("D:\person.per");括号内表示生成文件的存储路径

    FileOutputStream  fout = new FileOutputStream(file);

    2.创建ObjectOutputStream 对象

    ObjectOutputStream oos = null;
    oos = new ObjectOutputStream(fout);

    3.将对象写入

    p是一个实例化的对象Person p = new Person("aaa",12);

    oos.writeObject(p);

    最后就得关闭输出流,节省资源

    oos.close();
    fout.close();

    反序列化也分三步,与序列化对应

    1.

    1.新建FileInputStream 对象,读取文件

    FileInputStream fin = new FileInputStream(file);

    2.新建ObjectInputStream 对象
    ObjectInputStream oin;
    oin = new ObjectInputStream(fin);

    3.读取文件并恢复为对象
    Person per1 = (Person) oin.readObject();
    fin.close();
    oin.close();

    public class Javaxuliehua {
    	public static void main(String[] args) {
    		
    		
    		//File file = new File("D:"+File.separator+"person.per");
    		File file = new File("D:\person.per");
    		/**
    		 * 序列化过程
    		 */
    		Person p = new Person("aaa",12);
    		try {
    			FileOutputStream fout = new FileOutputStream(file);
    			ObjectOutputStream oos = null;
    			oos = new ObjectOutputStream(fout);
    			oos.writeObject(p);
    			oos.close();
    			fout.close();
    		/**
    		 * 反序列化过程
    		 */
    			FileInputStream fin = new FileInputStream(file);
    			ObjectInputStream oin;
    			oin = new ObjectInputStream(fin);
    			Person per1 = (Person) oin.readObject();
    			System.out.println(per1);
    			fin.close();
    			oin.close();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		}catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    	}
    }
    
    class Person implements Serializable{
    	private String name;
    	private int age;
    	public Person(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	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;
    	}
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", age=" + age + "]";
    	}
    }


  • 相关阅读:
    MySQL中默认值中用时间函数的问题
    mysql数据表的操作
    mysql数据库的基本操作
    mysql数据库的几个基本概念
    【转载】CentOS6.5_X64下安装配置MongoDB数据库
    Swap Swap,即交换分区
    linux中给PHP安装mongodb的扩展
    centos yum 安装 mongodb 以及php扩展
    设计模式主要分三个类型:创建型、结构型和行为型
    MySQL DELETE语句和TRUNCATE TABLE语句的区别
  • 原文地址:https://www.cnblogs.com/tonghao/p/8506026.html
Copyright © 2020-2023  润新知