关于IO流

10 篇文章 0 订阅

在这里插入图片描述

IO流的分类

  • 一种是按照流的方向进行分类:输入(读)、输出(写)。
  • 另一种方式是按照读取数据方式不同进行分类:
    • 1、有的流是按照字节的方式读取数据,一次读取一个字节(byte),等同于一次读取8个二进制位。这种流是万能的,什么类型的文件都可以读取(包括:文本文件、图片文件、声音文件、视频文件等),这种称为字节流。
    • 2、有的流是按照字符的方式读取数据,一次读取一个字符,这种事为了方便读取普通文本文件而存在的,改流不能读取图片、神医、视频等文件,只能读取纯文本,连word文件也无法读取(word文件含有格式)。

java IO流的四大家族:

  • java.io.InputStream(字节)

  • java.io.OutputStream(字节)

  • java.io.Reader(字符)

  • java.io.Writer(字符)

    输入输出流用完后都需要close(),一般写在finally中。而输出流在close()前需要flush()刷新。这个刷新表示将通道/管道当中剩余为输出的数据强行输出完。(清空管道)

一般需要掌握的流有16个

  • 文件专属流:
    • FileInputStream
    • FileOutputStream
    • FileReader
    • FileWriter
  • 缓冲流:
    • BufferedReader
    • BufferedWriter
    • BufferedInputStream
    • BufferedOutputStream
  • 转换流:
    • InputStreamReader
    • OutputStreamWriter
  • 数据流:
    • DataInputStream
    • DataOutputStream
  • 标准输出流:
    • PrintWriter
    • PrintStream
  • 对象流:
    • ObjectInputStream
    • ObjectOutputStream

FileInputStream

使用普通方法:一次读取一个字节,内存和硬盘交互频繁,资源开销大。
在这里插入图片描述在这里插入图片描述
可以采用byte数组一次读取多个字节,最多读取数组.length个字节。
在这里插入图片描述改进while循环在这里插入图片描述
这个可以配合available()方法使用,在没有读取前available()得到的是总字节数量,但该方法不太适合大文件,因为byte[]数组不能太大。在这里插入图片描述

FileOutputStream

该字节输出流大题跟输入流流程一样,多了一个flush(),但有一点需要注意,输出流若不存在文件则会创建文件,如果存在则会清空文件再输出。如果想要不清空文件而是接着末尾输出,则需要在实例化输出流对象时加入关键字true。在这里插入图片描述加入关键字true在这里插入图片描述

文件的copy

文件的复制本质上是边读边写。
在这里插入图片描述

FileReader/Writer

文件字符流输入/输出,只能读取/输出普通文本文件。读取/输出文本内容时方便快捷。在这里插入图片描述在这里插入图片描述

使用字符流copy(复制普通文本文件)

在这里插入图片描述

BufferedReader/Writer

自带缓冲区的字符输入流,使用这个流时不需要自定义char、byte等数组,自带缓冲。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
需要注意,readLine方法到结尾时返回为null,不再是-1。
这种字符流通常称为包装(处理)流,而在其中使用的FileReader称为节点流。

InputStreamReader/OutputStreamWriter

在这里插入图片描述转换流,把字节流转换成字符流使用。

数据流

这个流可以将数据和数据类型一并写入文件,同时需要数据流才能读取该文件。读取数据时还需要知道数据写入顺序才能读取。在这里插入图片描述在这里插入图片描述

PrintStream

在这里插入图片描述在这里插入图片描述该流不需要关闭,而且可以设置输出方向,实现了日志的基础模型。
日志工具类的基础实现:
在这里插入图片描述

IO流和Propertise

通常用来做配置文件或本地化数据的使用,实现了数据驱动这个理念。在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值