java的序列化流和打印流
对象操作流(序列化流)
每次读取和写出的都是JavaBean对象.
序列化:将对象写入到文件中的过程
反序列化:从文件中读取对象到程序的过程
transient: 标识瞬态,序列化的时候,该修饰符修饰的成员不能序列化
ObjectOutputStream
- 构造方法:
- public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream。
- 特有方法:
- public final void writeObject (Object obj) : 将指定的对象写出。
ObjectInputStream
构造方法:
- public ObjectInputStream(InputStream in) : 创建一个指定InputStream的ObjectInputStream。
特有方法:
- public final Object readObject () : 读取一个对象。
java.io.EOFException : 数据输出流到了末尾,继续读取会抛出此异常(读到文件的末尾)
- 解决方案:使用集合存储要写出的对象,写数据的时候只需要写一个集合对象,下次使用的时候只需要读取了一次就可以.
举个例子:
package review.serializable;
import lombok.*;
import java.io.Serializable;
import java.net.ServerSocket;
/**
* 创建学生类
* 利用lombok可以使用注解来写get,set等方法,使实体类看起来很简单
* @author WZLOVE
* @create 2018-07-25 19:17
*/
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student implements Serializable {
private static final long serialVersionUID = -1495868075552053159L;
private String name;
private int age;
private double score;
}
package review.serializable;
import java.io.*;
import java.util.ArrayList;
/**
* 测试序列化流
*
* @author WZLOVE
* @create 2018-07-25 19:19
*/
public class SerializableDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// 创建对象输出流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stu1.txt"));
// 向文件中输出数据(为了方便读取,所以存入集合,这样的话,读取的时候只用读取一次,查看源码也可以看出,集合也实现了Serializable接口)
ArrayList<Student> list = new ArrayList<>();
// 向集合中添加数据
list.add(new Student("stu1",23,100.0));
list.add(new Student("stu2",23,98.0));
list.add(new Student("stu3",24,96.0));
// 利用对象输入流向文件中写入内容
oos.writeObject(list);
oos.close();
// 创建对象输入流
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stu1.txt"));
// 利用对象输入流获取文件内容
Object object = ois.readObject();
// 强制类型转换,将Object转换为集合
ArrayList<Student> arrayList = (ArrayList<Student>)object;
// 进行遍历
for (int i = 0; i < arrayList.size(); i++) {
System.out.println(arrayList.get(i));
}
// 关闭流
ois.close();
}
}
打印流(只有输出流)
- 字节打印流(了解)
- PrintStream:
- 字符打印流(掌握)
- PrintWriter
构造方法:
- public PrintStream(String fileName) : 使用指定的文件名创建一个新的打印流。
- PrintWriter(File file) 使用指定的文件创建一个新的PrintWriter,而不需要自动的线路刷新。
- PrintWriter(OutputStream out) 从现有的OutputStream创建一个新的PrintWriter,而不需要自动线路刷新。
- PrintWriter(Writer out) 创建一个新的PrintWriter,没有自动线冲洗(追加内容考虑参数的变化)。
- PrintWriter(Writer out, boolean autoFlush)创建一个新的PrintWriter。
- PrintWriter(OutputStream out, boolean autoFlush) 从现有的OutputStream创建一个新的PrintWriter。
特有方法(自动换行(实现自动换行,必须使用println方法)和自动刷新(在构造方法中启用并且要使用println()方法)功能):
- void println(Object x) 打印一个对象,然后终止该行。
- PrintWriter
注意:
- 实现自动换行必须使用PrintWriter中特有的方法println
- 实现自动刷新必须满足两个要求,第一个是在构造方法中启用自动刷新,第二个是使用PrintWriter中特有的方法println
举个例子:
package review.print;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
/**
* 测试打印流的书写
* 打印流也是用写文件的,简单的是他能实现自动刷新和自动换行,其他的都简单,就不演示了
* 打印流分为打印字节流和打印字符流
* @author WZLOVE
* @create 2018-07-25 19:55
*/
public class PrintWriteDemo {
public static void main(String[] args) throws IOException {
// 打印流只有输出流
// 创建打印字符流对象(一个true表示追加,第二个true代表开启自动刷新)
PrintWriter pw = new PrintWriter(new FileWriter("pw.txt",true),true);
// 利用特有的方法进行输出(无论是自动刷新还是自动换行,都要利用这个特有的方法)
pw.println("qazxswedc,我爱你");
pw.println("qazxswedc,我爱你");
pw.println("qazxswedc,我爱你");
// 关闭流
pw.close();
}
}
java的序列化流和打印流的更多相关文章
- 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】
[缓冲流.转换流.序列/反序列化流.打印流] 一.缓冲流 1.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文 ...
- java 21 - 12 IO流的打印流
打印流 字节流打印流 PrintStream 字符打印流 PrintWriter打印流的特点: A:只有写数据的,没有读取数据.只能操作目的地,不能操作数据源.(只能写入数据到文件中,而不能从文件中提 ...
- JAVA的IO流:打印流
打印流: 打印流是输出信息最方便的类,注意包含字节打印流PrintStream和字符打印流:PrintWriter.打印流提供了非常方便的打印功能, 可以打印任何类型的数据信息,例如:小数,整数,字符 ...
- Java - IO 内存流和打印流
IO 内存流和打印流操作 字符编码 计算机中所有的信息组成都是二进制数据,所有能够描述的中文文字都是经过处理后的结果:所有的语言文字都会使用编码来进行描述,例如:ASCII码 常见编码 GBK/GB2 ...
- Java第三阶段学习(五、流的操作规律、Properties流、序列化流与反序列化流、打印流、commons-IO jar包)
一.流的操作规律 四个明确: 明确一:明确要操作的数据是数据源还是数据目的地 源:InputStream Reader 目的地:OutputStream Writer 先根据需求明确是要读还是写 ...
- JAVA基础之Properties类、序列化流及打印流、commons-IO
个人理解: Properties类是个存储String类型的键值对的集合类,可以用其存储一些关键的账号密码什么的,同时后面的注释可以很好的帮助理解,但是需要注意的是其文件中不能出现其他的符号:序列化与 ...
- java基础(25):Properties、序列化流、打印流、commons-IO
1. Properties类 1.1 Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符 ...
- Java之IO流进阶篇:内存流,打印流,对象流
Java中的IO流,即为输入输出流.所谓输入输出流,都是相对于程序而言,程序就是这个参照物.一张图看懂输入输出流: 输入流抽象基类:InputStream,Reader 输出流抽象基类:OutputS ...
- JavaProperties类、序列化流与反序列化流、打印流、commons-IO整理
Properties类 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. 特点: 1.Hashtable的子类 ...
随机推荐
- 提高JetBrains软件的性能
在Java开发中,我用的开发工具是Idea,它是JetBrains公司旗下的产品. 电脑内存较大,但是Idea加载的慢,我们可以通过 \bin 下的 idea64.exe.vmoptions 和 id ...
- GearCase UI - 自己构建一套基于 Vue 的简易开源组件库
最近 1 ~ 2 月除了开发小程序之外,还一直在继续深入的学习 Vuejs.利用零碎.闲暇的时间整合了一套基于 Vue 的 UI 组件库.命名为 GearCase UI,意为齿轮盒.现在把该项目进行开 ...
- Centos 7 安装Zabbix
一.环境准备与说明: 1.zabbix server 版本:3.4.12 ,https://www.zabbix.com/download 2.zabbix agent版本:3.4.14,https: ...
- 关于Maven的一点理解
maven是一个项目管理工具,主要作用是: 1.依赖管理(jar包,工程之间); 2.统一开发规范和工具.完成项目的一步构建 3.工程聚合.继承.依赖 其核心配置文件就是pom.xml:pom即Pro ...
- AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks
ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...
- RabbitMQ理论部分
概念 queue 队列 exchange 交换机 bind 绑定 channel 通道 一个发送消息流程包含上述四个概念.消息经过channel传递给exc ...
- 常用DB2命令
建库 db2 territory CN on 建库到指定位置 db2 create database OADB on D: using codeset GBK territory CN 列出所有数据库 ...
- 20172329 2018-2019 《Java软件结构与数据结构》实验三报告
20172329 2018-2019-2 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 王文彬 学号:2017232 ...
- 项目Beta冲刺(团队)总结
团队成员及分工 姓名 学号 分工 陈家权 031502107 前端(消息模块) 赖晓连 031502118 前端(问答模块) 雷晶 031502119 服务器 林巧娜 031502125 前端(首页模 ...
- 团队作业5-Alpha版本测试报告(彼岸芳华队)
请根据团队项目中软件的需求文档.功能说明.系统设计和测试计划,写出软件的测试过程和测试结果,并回答下述问题. 一.在测试过程中总共发现了多少Bug?每个类别的Bug分别为多少个?(10分) 在测试过程 ...