对象操作流(序列化流)

每次读取和写出的都是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

      • 构造方法:

        1. public PrintStream(String fileName) : 使用指定的文件名创建一个新的打印流。
        2. PrintWriter(File file) 使用指定的文件创建一个新的PrintWriter,而不需要自动的线路刷新。
        3. PrintWriter(OutputStream out) 从现有的OutputStream创建一个新的PrintWriter,而不需要自动线路刷新。
        4. PrintWriter(Writer out) 创建一个新的PrintWriter,没有自动线冲洗(追加内容考虑参数的变化)。
        5. PrintWriter(Writer out, boolean autoFlush)创建一个新的PrintWriter。
        6. PrintWriter(OutputStream out, boolean autoFlush) 从现有的OutputStream创建一个新的PrintWriter。
      • 特有方法(自动换行(实现自动换行,必须使用println方法)和自动刷新(在构造方法中启用并且要使用println()方法)功能):

        1. void println(Object x) 打印一个对象,然后终止该行。

注意:

  1. 实现自动换行必须使用PrintWriter中特有的方法println
  2. 实现自动刷新必须满足两个要求,第一个是在构造方法中启用自动刷新,第二个是使用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的序列化流和打印流的更多相关文章

  1. 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】

    [缓冲流.转换流.序列/反序列化流.打印流] 一.缓冲流 1.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文 ...

  2. java 21 - 12 IO流的打印流

    打印流 字节流打印流 PrintStream 字符打印流 PrintWriter打印流的特点: A:只有写数据的,没有读取数据.只能操作目的地,不能操作数据源.(只能写入数据到文件中,而不能从文件中提 ...

  3. JAVA的IO流:打印流

    打印流: 打印流是输出信息最方便的类,注意包含字节打印流PrintStream和字符打印流:PrintWriter.打印流提供了非常方便的打印功能, 可以打印任何类型的数据信息,例如:小数,整数,字符 ...

  4. Java - IO 内存流和打印流

    IO 内存流和打印流操作 字符编码 计算机中所有的信息组成都是二进制数据,所有能够描述的中文文字都是经过处理后的结果:所有的语言文字都会使用编码来进行描述,例如:ASCII码 常见编码 GBK/GB2 ...

  5. Java第三阶段学习(五、流的操作规律、Properties流、序列化流与反序列化流、打印流、commons-IO jar包)

    一.流的操作规律 四个明确: 明确一:明确要操作的数据是数据源还是数据目的地 源:InputStream   Reader 目的地:OutputStream Writer 先根据需求明确是要读还是写 ...

  6. JAVA基础之Properties类、序列化流及打印流、commons-IO

    个人理解: Properties类是个存储String类型的键值对的集合类,可以用其存储一些关键的账号密码什么的,同时后面的注释可以很好的帮助理解,但是需要注意的是其文件中不能出现其他的符号:序列化与 ...

  7. java基础(25):Properties、序列化流、打印流、commons-IO

    1. Properties类 1.1 Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符 ...

  8. Java之IO流进阶篇:内存流,打印流,对象流

    Java中的IO流,即为输入输出流.所谓输入输出流,都是相对于程序而言,程序就是这个参照物.一张图看懂输入输出流: 输入流抽象基类:InputStream,Reader 输出流抽象基类:OutputS ...

  9. JavaProperties类、序列化流与反序列化流、打印流、commons-IO整理

    Properties类 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. 特点: 1.Hashtable的子类 ...

随机推荐

  1. 提高JetBrains软件的性能

    在Java开发中,我用的开发工具是Idea,它是JetBrains公司旗下的产品. 电脑内存较大,但是Idea加载的慢,我们可以通过 \bin 下的 idea64.exe.vmoptions 和 id ...

  2. GearCase UI - 自己构建一套基于 Vue 的简易开源组件库

    最近 1 ~ 2 月除了开发小程序之外,还一直在继续深入的学习 Vuejs.利用零碎.闲暇的时间整合了一套基于 Vue 的 UI 组件库.命名为 GearCase UI,意为齿轮盒.现在把该项目进行开 ...

  3. Centos 7 安装Zabbix

    一.环境准备与说明: 1.zabbix server 版本:3.4.12 ,https://www.zabbix.com/download 2.zabbix agent版本:3.4.14,https: ...

  4. 关于Maven的一点理解

    maven是一个项目管理工具,主要作用是: 1.依赖管理(jar包,工程之间); 2.统一开发规范和工具.完成项目的一步构建 3.工程聚合.继承.依赖 其核心配置文件就是pom.xml:pom即Pro ...

  5. AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks

    ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...

  6. RabbitMQ理论部分

    概念 queue        队列 exchange   交换机 bind          绑定 channel     通道 一个发送消息流程包含上述四个概念.消息经过channel传递给exc ...

  7. 常用DB2命令

    建库 db2 territory CN on 建库到指定位置 db2 create database OADB on D: using codeset GBK territory CN 列出所有数据库 ...

  8. 20172329 2018-2019 《Java软件结构与数据结构》实验三报告

    20172329 2018-2019-2 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 王文彬 学号:2017232 ...

  9. 项目Beta冲刺(团队)总结

    团队成员及分工 姓名 学号 分工 陈家权 031502107 前端(消息模块) 赖晓连 031502118 前端(问答模块) 雷晶 031502119 服务器 林巧娜 031502125 前端(首页模 ...

  10. 团队作业5-Alpha版本测试报告(彼岸芳华队)

    请根据团队项目中软件的需求文档.功能说明.系统设计和测试计划,写出软件的测试过程和测试结果,并回答下述问题. 一.在测试过程中总共发现了多少Bug?每个类别的Bug分别为多少个?(10分) 在测试过程 ...