JavaSE IO流概述

一、什么是IO

  • I : Input
  • O : Output
  • 通过IO可以完成硬盘文件的读和写

二、IO流的分类

  1. 一种方式是按照流的方向进行分类:
    以内存作为参照物
    往内存中去,叫做输入(Input),或者叫做读(Read),是输入流(InputStream)
    从内存中出来,叫做输出(Output),或者叫做写(Write),是输出流(OutputStream)
  2. 一种方式是按照读取数据方式不同进行分类
    有的流是按照字节的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制位,这种流是万能的,什么类型的文件都可以读取,包括:文本文件,图片,声音文件,视频文件等…
    有的流是按照字符的方式读取数据的,一次读取一个字符,这种流是为了方便读取,以普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件,只能读取纯文本文件,连word文件都无法读取
  • 字节流与字符流
    字节流:一切文件数据(文本文件,图片,声音文件,视频文件等)在存储时,都是以二进制数字的形式保存,即一个一个的字节,传输时一样如此,所以,字节流可以传输任意文件数据,在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据
    字符流:当使用字节流读取文本文件时,可能会有一个小问题,就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储,所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件
  • 综上所述,流的分类:
    输入流、输出流
    字节流、字符流
  • Java中所有的流都是在:java.io.*;下

三、Java四大 IO流

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

四、java.io包下16个掌握的流

五、节点流与处理流

1. 节点流

  • 未经封装,low level stream
  • 节点流直接与数据源相连,用于输入或者输出
  • 节点流是可以从或向一个特定的地方(节点)读写数据,也叫低级流,如FileReader

1.1 常用节点流

  • 父类
    InputStream
    OutputStream
    Reader
    Writer
  • 文件(对文件进行处理的节点流)
    FileInputStream
    FileOutputStream
    FileReader
    FileWriter
  • 数组(对数组进行处理的节点流)
    ByteArrayInputStream
    ByteArrayOutputStream
    CharArrayReader
    CharArrayWriter
  • 字符串(对字符串进行处理的节点流)
    StringReader
    StringWriter
  • 管道(对管道进行处理的节点流)
    PipedInputStream
    PipedOutputStream
    PipedReader
    PipedWriter

2. 处理流

  • 封装过, high level stream
  • 外部负责包装的这个流,叫做:包装流/处理流,是在节点流的基础上对之进行加工,通过封装后来实现数据的读写功能,处理流的构造方法必须要传入节点流的子类,对于处理流来说,只需要关闭最外层流就行,里面的节点流会自动关闭( in.close() )
  • 节点流与包装流是相对而言的

2.1 常用处理流

  • 父类
    InputStream
    OutputStream
    Reader
    Writer
  • 缓冲流(需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以写数据的时候需要使用flush方法)
    BufferedImputStream
    BufferedOutputStream
    BufferedReader
    BufferedWriter
  • 转换流
    InputStreamReader
    OutputStreamWriter
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jayco-J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值