Java学习笔记32(IO:序列化流)
对象中的数据 ,以流的形式,写入到文件中保存,过程称为写出对象,对象的序列化
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:序列化流)的更多相关文章
- Java学习笔记42(序列化流)
对象中的数据,以流的形式,写入到文件中保存 过程称为写出对象,对象的序列化 ObjectOutputStream将对象写到文件中,实现序列化 在文件中,以流的形式,将对象读取出来, 读取对象,对象的反 ...
- java学习笔记之IO编程—内存流、管道流、随机流
1.内存操作流 之前学习的IO操作输入和输出都是从文件中来的,当然,也可以将输入和输出的位置设置在内存上,这就需要用到内存操作流,java提供两类内存操作流 字节内存操作流:ByteArrayOutp ...
- 【原】Java学习笔记033 - IO
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:继承关系中爷 ...
- Java学习笔记之——IO
一. IO IO读写 流分类: 按照方向:输入流(读),输出流(写) 按照数据单位:字节流(传输时以字节为单位),字符流(传输时以字符为单位) 按照功能:节点流,过滤流 四个抽象类: InputStr ...
- java学习笔记之IO编程—打印流和BufferedReader
1.打印流(PrintWriter) 想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一 ...
- Java学习笔记43(打印流、IO流工具类简单介绍)
打印流: 有两个类:PrintStream,PrintWriter类,两个类的方法一致,区别在于构造器 PrintStream:构造方法:接收File类型,接收字符串文件名,接收字节输出流(Outpu ...
- Java学习笔记-10.io流
1.输入流,只能从中读取数据,而不能向其写出数据.输出流,只能想起写入字节数据,而不能从中读取. 2.InputStream的类型有: ByteArrayInputStream 包含一个内存缓冲区,字 ...
- java学习笔记之IO编程—字节流和字符流
1. 流的基本概念 在java.io包里面File类是唯一一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操 ...
- java学习笔记之IO编程—对象序列化
对象序列化就是将内存中保存的对象以二进制数据流的形式进行处理,可以实现对象的保存或网络传输. 并不是所有的对象都可以被序列化,如果要序列化的对象,那么对象所在的类一定要实现java.io.Serial ...
随机推荐
- 20165309 实验三 敏捷开发与XP实践
2017-2018-2 20165309实验三<Java面向对象程序设计>实验报告 一.实验内容 1. XP基础 2. XP核心实践 3. 相关工具 二.实验步骤 (一)代码规范 1.在I ...
- python记录_day30 多进程
1.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 同一个程序执行两次,就会产生两个进程 ## 进程调度算 ...
- 【PowerDesigner】【3】字段添加注释和默认值
问题:最开始生成的Table,表头有些字段没有 解决方案: 1,打开表(双击左键),点击下图圈起来的图标 2,找到comment(注释),勾选 3,找到default value(默认值),勾选 4, ...
- js 遍历
for循环 var a = new Array("first", "second", "third") for(var i = 0;i &l ...
- HDU-6395-矩阵快速幂
Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- C# 语法特性 - 泛型(C#2.0)
泛型将 类型参数 的概念引入了 .NET Framework. 泛型主要有两个优点: 1.编译时可以保证类型安全. 2.不用做类型转换,获得一定的性能提升. 泛型方法.泛型委托.泛型接口 除了泛型类之 ...
- Spring注解之@Import
/** * Indicates one or more {@link Configuration @Configuration} classes to import. * 表示import 一个或多个 ...
- xpath 获取表单的值
<input type="hidden" id="hospital_id" value="6666sui"> $selector ...
- mac+php+nginx+laravel配置启动
首先保证mac安装php,nginx,composer 根据laravel中文文档进行安装 http://laravelacademy.org/post/6665.html 直接指向 composer ...
- Ubuntu 14.04下如何更换更新源(更新为163源)
之前的安装ubuntu桌面版的之后安装yum,vim等会遇到一些问题, 比如:Ubuntu 14.04下如何更换更新源(更新为163源) 解决: http://jingyan.baidu.com/ar ...