I/O流概述

I/O流概述
1、流的分类
2、流的体系结构
3、重点的流
一、流的分类
 1、按照流的方向分类:输入流、输出流
以内存为参照物
  ① 往内存中去,叫做输入(Input),或者叫做读(Read)
  ② 从内存中出,叫做输出(Output),或者叫做写(Write)



 2、按照数据读取方式不同分类:字节流、字符流
  ① 按照字节的方式读取数据,一次读取1个字节byte,等同于一次性读取8个二进制
  这种流是万能的,什么类型都可以读取。包括:文本文件、图片、声音文件、视频文件等等
  ② 按照字符的方式读取数据,一次读取一个字符
  这种流是为了方便读取普通文本,这种流不能读取图片、声音、 视频等文件,只能读取纯文本文件,连word文件都无法读取
举例 注意:中文字符在windows系统中占用两个字节、英文字符在windows系统中占用一个字节
 当前有一个txt文件,里面的内容为 a中国bc欢迎你de
 采用字节流是这样读的:(一个字节一个字节读)
  第一次读一个字节,读‘a’
  第二次读一个字节,读‘中’的字符的前一半
  第三次读一个字节,读‘中’的字符的后一半
 采用字符流是这样读的:
  第一次读一个字符,读‘a’字符
  第二次读一个字符,读‘中’字符



二、流的体系结构
 四大家族的首领(抽象类):

java.io.InputStream  字节输入流
java.io.OutputStream  字节输出流
java.io.Reader  字符输入流
java.io.Writer  字符输出流



注意:在Java中只要类名以“Stream”结尾的都是字节流,以“Reader/Writer”结尾的都是字符流
  所有的流都实现了java.io.closeable接口,都是可关闭的,都有close()方法
注意:流毕竟是一个管道,内存和硬盘之间的通道,用完之后一定要关闭,不然会耗费(占用)很多资源
  所有的输出流都实现了java.io.flushable接口,都是可刷新的,都有flush()方法
注意:输出流在最终输出之后,一定要记得flush()刷新一下,这个刷新表示将通道/管道当中剩余未输出的数据强行输出完(清空管道)
    刷新的作用就是清空管道,如果没有flush()可能会导致丢失数据



三、重点的流

 文件专属:java.io.FileInputStream、java.io.FileOutputStream、java.io.FileReader、java.io.FileWriter
 转换流(将字节流转换成字符流):java.io.InputStreamReader、java.io.OutputStreamWriter
 缓冲流专属:java.io.bufferedInputStream、java.io.bufferedOutputStream、java.io.bufferedReader、java.io.bufferedWriter
 数据流专属:java.io.DataInputStream、java.io.DataOutputStream
 标准输出流:java.io.PrintWriter、java.io.PrintStream
 对象专属流:java.io.ObjectInputStream、java.io.ObjectOutputStream



posted @ 2022-03-11 15:32  windy_hu  阅读(132)  评论(0)    收藏  举报