对象操作流(序列化流)

每次读取和写出的都是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. [转载]java面试中经常会被问到的一些算法的问题

    Java面试中经常会被问到的一些算法的问题,而大部分算法的理论及思想,我们曾经都能倒背如流,并且也能用开发语言来实现过, 可是很多由于可能在项目开发中应用的比较少,久而久之就很容易被忘记了,在此我分享 ...

  2. Shell 字符串处理、获取文件名和后缀名

    http://blog.csdn.net/guojin08/article/details/38704823

  3. mybatis oracle和mysql like模糊查询写法

    oracle:RESOURCE_NAME LIKE '%' || #{resourceName} || '%'mysql:RESOURCE_NAME like concat(concat(" ...

  4. OO第四次作业-对前三次作业总结

    第一次作业由于直接没怎么学过java,全靠一星期速成,前几天看了java的语法,但是因为光看没有打代码,学习效果并不是特别好.由面向过程转向面向对象,不是特别清楚该怎么办,虽然写的是两个类,但实际上是 ...

  5. 初学Cocos2dx

    初学cocos2dx Cocos2dx 中的主要概念包括:应用.导演.场景.层.精灵.动画.动作. Cocos2dx里面的主要类 1.CCObject Object Object Object 是co ...

  6. Chapter 6 面向对象基础

    面向对象=对象+类+继承+通信,如果一个软件系统采用这些概念来建立模型并给予实现,那么它就是面向对象的.面向对象的软件工程方法是面向对象方法在软件工程领域的全面运用涉及到从面向对象分析.面向对象设计. ...

  7. Codeforces Round #196 (Div. 2) D. Book of Evil 树形dp

    题目链接: http://codeforces.com/problemset/problem/337/D D. Book of Evil time limit per test2 secondsmem ...

  8. Internet History, Technology and Security (Week5.1)

    Week5 The Transport layer is built on the Internetwork layer and is what makes our network connectio ...

  9. lintcode-514-栅栏染色

    514-栅栏染色 我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染. 必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案. 注意事项 n和k都是非负整数 样例 n = 3, ...

  10. 发布.NET Core到IIS

    目录: 支持操作系统 IIS配置 安装.NET Core Windows Server Hosting 部署应用程序 在IIS配置网站 创建一个数据保护注册表项 常见的错误 额外的资源 支持操作系统 ...