目录

一、缓冲流

1.缓冲流的作用

2.缓冲流的分类

3.字节缓冲流的介绍和使用

4.字符缓冲流的介绍和使用

5.综合练习:文本排序

二、转换流

1.字符编码

2.字符集

3.编码引出的问题

4.InputStreamReader类

5.OutputStreamWriter类

三、序列化流

1.什么是序列化流

2.ObjectOutputStream类的使用

(1)构造方法

(2)序列化操作的前提

(3)写出对象方法

3.ObjectInputStream类的使用

(1)构造方法

(2)反序列化操作的异常分析

(3)读取对象方法

4.序列化多个对象练习

四、打印流PrintStream

1.介绍

2. 构造方法

3.小练习:改变打印流向


一、缓冲流

1.缓冲流的作用

缓冲流又叫增强流,用来给四大基本流做性能方面的加强。

2.缓冲流的分类

字节缓冲流: BufferedInputStream , BufferedOutputStream

字符缓冲流: BufferedReader , BufferedWriter

3.字节缓冲流的介绍和使用

(1)字节缓冲流的构造

public BufferedInputStream(InputStream in) :创建一个 新的缓冲输入流。

public BufferedOutputStream(OutputStream out) : 创建一个新的缓冲输出流。

4.字符缓冲流的介绍和使用

(1)字符缓冲流的构造

public BufferedReader(Reader in) :创建一个 新的缓冲输入流。

public BufferedWriter(Writer out) : 创建一个新的缓冲输出流。

(2)特有方法

BufferedReader: public String readLine() : 读一行文字。

BufferedWriter: public void newLine() : 写一行行分隔符,由系统属性定义符号。

5.综合练习:文本排序

HashMap<String, String> linemap = new HashMap<>();//创建流对象try (BufferedReader br = new BufferedReader(new FileReader("出师表"));BufferedWriter bw = new BufferedWriter(new FileWriter("出师表02.txt"));) {String line = null;//读取数据while ((line = br.readLine()) != null) {//解析文本String[] split = line.split("\\.");//保存到集合linemap.put(split[0], split[1]);}//遍历集合for (int i = 1; i <= linemap.size(); i++) {//获取map中文本String value = linemap.get(String.valueOf(i));//写出拼接文本bw.write(i + "." + value);//换行bw.newLine();}} catch (IOException e) {e.printStackTrace();}

二、转换流

1.字符编码

就是一套自然语言的字符与二进制数之间的对应规则。

编码:字符通过编码转成对应的码值(看的懂的变为看不懂的)

解码:码值通过解码转成对应的字符(看不懂的变为看的懂的)

2.字符集

是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。

3.编码引出的问题

在IDEA中,使用FileReader 读取项目中的文本文件。由于IDEA的设置,都是默认的UTF-8 编码,所以没有任何问题。但是,当读取Windows系统中创建的文本文件时,由于Windows系统的默认是GBK编码,就会出现乱码。

4.InputStreamReader类

转换流java.io.InputStreamReader ,是Reader的子类,是从字节流到字符流的桥梁。

(1)构造方法

InputStreamReader(InputStream in) : 创建一个使用默认字符集的字符流。

InputStreamReader(InputStream in, String charsetName) : 创建一个指定字符集的字符流。

5.OutputStreamWriter类

转换流java.io.OutputStreamWriter ,是Writer的子类,是从字符流到字节流的桥梁。

(1)构造方法

OutputStreamWriter(OutputStream in) : 创建一个使用默认字符集的字符流。

OutputStreamWriter(OutputStream in, String charsetName) : 创建一个指定字符集的字符流。

三、序列化流

1.什么是序列化流

Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的数据等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。

反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。

2.ObjectOutputStream类的使用

(1)构造方法

public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream。

(2)序列化操作的前提

一个对象要想序列化,必须满足两个条件:

①该类必须实现java.io.Serializable 接口, Serializable 是一个标记接口,不实现此接口的类将不会使任何状态序列化或反序列化,会抛出NotSerializableException 。

②该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用transient 关键字修饰。

(3)写出对象方法

public final void writeObject (Object obj) : 将指定的对象写出。

3.ObjectInputStream类的使用

(1)构造方法

public ObjectInputStream(InputStream in) : 创建一个指定InputStream的ObjectInputStream。

(2)反序列化操作的异常分析

①InvalidClassException异常

当JVM反序列化对象时,能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出一个InvalidClassException 异常。发生这个异常的原因如下:

A.该类的序列版本号与从流中读取的类描述符的版本号不匹配

B.该类包含未知数据类型

C.该类没有可访问的无参数构造方法

Serializable 接口给需要序列化的类,提供了一个序列版本号。serialVersionUID 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。

②ClassNotFoundException异常

序列化前后,被序列化类被删除了。

(3)读取对象方法

public final Object readObject () : 读取一个对象。

4.序列化多个对象练习

分析:

(1)把若干学习对象 ,保存到集合中。

(2)把集合序列化。

(3)反序列化读取时,只需要读取一次,转换为集合类型。

(4)遍历集合,可以打印所有的学生信息

代码如下:

public class Student implements Serializable {private static final long serialVersionUID = 8002194731998770433L;private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}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;}
}
 public static void main(String[] args) throws Exception {// 创建 学生对象Student student = new Student("老王", 20);Student student2 = new Student("老张", 22);Student student3 = new Student("老李", 24);ArrayList<Student> arrayList = new ArrayList<>();arrayList.add(student);arrayList.add(student2);arrayList.add(student3);// 序列化操作serializ(arrayList);// 反序列化ObjectInputStream ois = new ObjectInputStream(new FileInputStream("list.txt"));// 读取对象,强转为ArrayList类型ArrayList<Student> list = (ArrayList<Student>) ois.readObject();for (int i = 0; i < list.size(); i++) {Student s = list.get(i);System.out.println(s.getName() + "‐‐" + s.getAge());}}private static void serializ(ArrayList<Student> arrayList) throws Exception {// 创建 序列化流ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("list.txt"));// 写出对象oos.writeObject(arrayList);// 释放资源oos.close();}

四、打印流PrintStream

1.介绍

作用:用来打印各种数据类型

特点:

a.永远不会抛出IOException

b.不需要关心字符字节,打印什么就是什么

2. 构造方法

public PrintStream(String fileName) : 使用指定的文件名创建一个新的打印流。

PrintStream(OutputStream out): 创建一个新的打印流。

PrintStream(File file): 使用指定的文件创建一个新的打印流。

3.小练习:改变打印流向

 // 调用系统的打印流,控制台直接输出97System.out.println(97);// 创建打印流,指定文件的名称PrintStream ps = new PrintStream("ps.txt");// 设置系统的打印流流向,输出到ps.txtSystem.setOut(ps);// 调用系统的打印流,ps.txt中输出97System.out.println(97);

缓冲流、转换流、序列化流相关推荐

  1. 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称

    文章目录 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称 ...

  2. Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties...

    你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新 ...

  3. Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,转换流,随机访问流,合并流,序列化流,Properties

    你需要的是什么,直接评论留言. 获取更多资源加微信公众号"Java帮帮" (是公众号,不是微信好友哦) 还有"Java帮帮"今日头条号,技术文章与新闻,每日更新 ...

  4. File类,字节字符输入输出流,缓冲流,标准流,对象序列化流

    一,File文件类 1 File类创建功能:    public boolean createNewFiLe():当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件       如果文件 ...

  5. IO流案例以及特殊操作流/对象对象序列化流/Properties集合

    文章目录 IO流案例 复制单级文件夹 复制多级文件夹 IO特殊操作流 标准输入流 字节打印流 字符打印流 对象序列化流 serialVersionUID&transient Propertie ...

  6. 【小白学Java】D32》》》IO流 之 序列化流 打印流

    [友情链接]➡➡▶IO流 之 File类 & 递归 [友情链接]➡➡▶IO流 之 过滤器 & 字节流 [友情链接]➡➡▶IO流 之字符流 & 属性集(Properties集合) ...

  7. Java19-day10【标准输入输出流、字节字符打印流、对象序列化-反序列化流、serialVersionUIDtransient、Properties】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  8. java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...

    一.properties集合 集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储. 特点: Hashtable的子类,map集合中的方法 ...

  9. java序列化流_java 序列化流与反序列化流

    一 对象序列化流ObjectOutputStream ObjectOutputStream 将Java对象的基本数据类型和图形写入OutputStream.可以使用ObjectInputStream ...

  10. 对象序列化流与对象反序列化流(ObjectOutputStream,ObjectInputStream)

    这个连接包含了常用的流------IO流(总篇章) 对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象 这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型.对象的数据和对象中存 ...

最新文章

  1. Wiley-中国科学院文献情报中心开放科学联合研讨会第一讲:开放科学全球和中国发展态势...
  2. 吴恩达:人工智能寒冬不会到来,但我们太乐观了
  3. JavaScript一次性定时器的设置和取消
  4. 物联网在医疗保健中的应用
  5. 开发中常遇到的linux系统配置操作整理
  6. 财富信息不需要传userID后台会根据保存的session提供数据
  7. pytorch nn.Conv1d
  8. 金三银四的面试黄金季节,Android面试题来了!
  9. yum下载文件的缓存位置
  10. 著作权登记信息采集表
  11. xshell5产品秘钥
  12. Matlab学习笔记 kron函数
  13. 光棍.com市场推广策划书(爆笑)
  14. 国信安web安全——文件上传漏洞
  15. Assertion failed: Protocol wrong type for socket [10041] zeromq 4.3.1\src\ip.cpp:417)错误
  16. 在aws亚马逊云EC2上创建root用户,并使用root用户登录
  17. 计算机专业英语实战记录(整理了上千个相关单词)
  18. Xctf Reverse菜鸟题解之csaw2013reversing2
  19. 什么是DHCP?为什么要用DHCP?(中科三方)
  20. NVMe SSD测试为何要先做预处理?

热门文章

  1. go.sum中特殊hash如何计算
  2. 删除有序数组中的重复项(数组去重)
  3. MySQL—视图(二)
  4. django_rest_framework之GenericAPIView(一)源码讲解
  5. Linux Kernel5.10的软中断(softirq)的本质
  6. Chrome好用的插件
  7. 03-CA/TA编程:aes_auth demo
  8. OpenSSL“心脏出血”漏洞
  9. 宝塔 mysql迁移_(2020年最新方法)如何快速迁移网站?使用宝塔一键迁移转移网站数据详细教程...
  10. angr学习笔记(13)(static_binary)