对象中的数据 ,以流的形式,写入到文件中保存,过程称为写出对象,对象的序列化

  ObjectOutputStream将对象写到序列中,实现序列化

在文件中,以流 的形式,将对象读取出来,过程称为读取对象,对象的反序列化

  ObjectInputStream将文件对象读取出来,实现反序列化

示例:

package com.zs.Demo;

import java.io.Serializable;

public class Person implements Serializable {
private String name;
  //age不会被序列化
private transient int age; public Person(String name, int age) {
this.name = name;
this.age = age;
} public Person() {
super();
} 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 +
'}';
}
}

测试类:

package com.zs.Demo;

import java.io.*;

public class Demo {
public static void main(String[] args) {
try {
fun();
fun2();
} catch (Exception e) {
e.printStackTrace();
} }
//反序列化流
private static void fun2() throws Exception {
//创建文件输入流对象
FileInputStream f=new FileInputStream("h:\\a.txt");
//创建反序列化流对象
ObjectInputStream os=new ObjectInputStream(f);
//读文件中的对象
Object obj = os.readObject();
System.out.println(obj);
//关闭流
os.close(); }
//对象的序列化,将对象存到文件中
private static void fun() throws IOException {
//创建文件输出流对象
FileOutputStream f=new FileOutputStream("h:\\a.txt");
//创建序列化流对象
ObjectOutputStream os=new ObjectOutputStream(f);
//创建对象
Person p=new Person("张三",18);
//将对象写到文件中
os.writeObject(p);
//关闭序列化流
os.close();
}
}

注意事项:

  1.对象若要序列化,对象类必须实现Serializable接口(类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。)

    这个接口没有方法,称为标记性接口,起到标记作用,只有别标记的类才可以序列化;

  2.静态不可以序列化:给age加上static修饰符,然后序列化,发现输出age=0

     原因:对象序列化,而静态不属于对象,属于类,对象不包含静态,所以静态不能序列化,为零原因是静态变量默认为0;

  2.transient关键字,阻止成员变量序列化,如果不想让变量序列化,又不能使用静态修饰符,就用transient关键字

Java学习笔记32(IO:序列化流)的更多相关文章

  1. Java学习笔记42(序列化流)

    对象中的数据,以流的形式,写入到文件中保存 过程称为写出对象,对象的序列化 ObjectOutputStream将对象写到文件中,实现序列化 在文件中,以流的形式,将对象读取出来, 读取对象,对象的反 ...

  2. java学习笔记之IO编程—内存流、管道流、随机流

    1.内存操作流 之前学习的IO操作输入和输出都是从文件中来的,当然,也可以将输入和输出的位置设置在内存上,这就需要用到内存操作流,java提供两类内存操作流 字节内存操作流:ByteArrayOutp ...

  3. 【原】Java学习笔记033 - IO

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:继承关系中爷 ...

  4. Java学习笔记之——IO

    一. IO IO读写 流分类: 按照方向:输入流(读),输出流(写) 按照数据单位:字节流(传输时以字节为单位),字符流(传输时以字符为单位) 按照功能:节点流,过滤流 四个抽象类: InputStr ...

  5. java学习笔记之IO编程—打印流和BufferedReader

    1.打印流(PrintWriter) 想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一 ...

  6. Java学习笔记43(打印流、IO流工具类简单介绍)

    打印流: 有两个类:PrintStream,PrintWriter类,两个类的方法一致,区别在于构造器 PrintStream:构造方法:接收File类型,接收字符串文件名,接收字节输出流(Outpu ...

  7. Java学习笔记-10.io流

    1.输入流,只能从中读取数据,而不能向其写出数据.输出流,只能想起写入字节数据,而不能从中读取. 2.InputStream的类型有: ByteArrayInputStream 包含一个内存缓冲区,字 ...

  8. java学习笔记之IO编程—字节流和字符流

    1. 流的基本概念 在java.io包里面File类是唯一一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操 ...

  9. java学习笔记之IO编程—对象序列化

    对象序列化就是将内存中保存的对象以二进制数据流的形式进行处理,可以实现对象的保存或网络传输. 并不是所有的对象都可以被序列化,如果要序列化的对象,那么对象所在的类一定要实现java.io.Serial ...

随机推荐

  1. Wannafly挑战赛23B游戏

    https://www.nowcoder.com/acm/contest/161/B 题意:两个人van游戏,n堆石子,每次只能取这堆石子数目的因子个数,没得取的人输,问第一个人的必胜策略有多少种 题 ...

  2. leetcode-algorithms-30 Substring with Concatenation of All Words

    leetcode-algorithms-30 Substring with Concatenation of All Words You are given a string, s, and a li ...

  3. Oracle11g温习-第十三章:索引

    2013年4月27日 星期六 10:46 1.索引(Index)的功能:对记录进行排序,加快表的查询速度  2.索引的分类  1)B-tree 索引(默认) a.在一个大表上 b.建立在重复值比较少的 ...

  4. git拉取远程分支并创建本地分支

    本地分支推送至远程 git checkout local_branch git push origin local_branch:remote_branch 一.查看远程分支 使用如下Git命令查看所 ...

  5. PHP手册-函数参考-加密扩展

    一.Crack.CSPRNG.Hash.Mcrypt.Mhash.OpenSSL.密码散列算法的对比   Crack CSPRNG Hash Mcrypt Mhash OpenSSL 密码散列算法 简 ...

  6. Redis开发规范

    1.冷热数据分离,不要将所有数据全部都放到Redis中 虽然Redis支持持久化,但是Redis的数据存储全部都是在内存中的,成本昂贵.建议根据业务只将高频热数据存储到Redis中[QPS大于5000 ...

  7. ActiveMQ异步分发消息

    org.apache.activemq.ActiveMQConnection 类中有个参数: protected boolean dispatchAsync=true; 这个参数的含义到底是什么? 使 ...

  8. Linux几种服务用处介绍

    rexec--Remote Execute,远程命令执行,允许远程机器在本机上远程执行命令,监听端口512. nfs--Network File System,网络文件系统,用于将本机文件夹共享到别的 ...

  9. TinyXML C++解析XML

    TinyXML 1.0可以参照上面的说明,获取一些概念. 转:http://blog.csdn.net/L_Andy/article/details/40615517 TinyXML 2.0 可以参照 ...

  10. 常用的flex知识 ,比起float position 好用不少

      flex布局具有便捷.灵活的特点,熟练的运用flex布局能解决大部分布局问题,这里对一些常用布局场景做一些总结. web页面布局(topbar + main + footbar) 示例代码   要 ...