IO流(字节流)

1 IO流概述

IO流的作用:就是可以对文件或者网络中的数据进行读、写的操作。如下图所示

  • 把数据从磁盘、网络中读取到程序中来,用到的是输入流。

  • 把程序中的数据写入磁盘、网络中,用到的是输出流。

  • 简单记:输入流(读数据)、输出流(写数据)

IO流分为两大派系:

1.字节流:字节流又分为字节输入流、字节输出流

2.字符流:字符流由分为字符输入流、字符输出流

总结流的四大类:

字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流

字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流。

字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流。

字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流。

总结:

  1. IO流的作用?

读写文件数据的

  1. IO流是怎么划分的,大体分为几类,各自的作用?

字节输入流 InputStream(读字节数据的)

字节输出流 OutputStream(写字节数据出去的)

字符输入流 Reader(读字符数据的)

字符输出流 Writer(写字符数据出去的)

2 FileInputStream读取一个字节

InputStream是抽象类,因为抽象类不能被实例化对象,我们用的是它的子类,叫FileInputStream。

使用FileInputStream读取文件中的字节数据,步骤如下

复制代码
第一步:创建FileInputStream文件字节输入流管道,与源文件接通。
第二步:调用read()方法开始读取文件的字节数据(一个字节一个字节读取)。
第三步:调用close()方法释放资源

3 FileInputStream读取多个字节

使用另一个read(byte[] bytes)的重载方法,可以一次读取多个字节,至于一次读多少个字节,就在于你传递的数组有多大。

使用FileInputStream一次读取多个字节的步骤如下

复制代码
第一步:创建FileInputStream文件字节输入流管道,与源文件接通。
第二步:调用read(byte[] bytes)方法开始读取文件的字节数据。
第三步:调用close()方法释放资源
  • 需要我们注意的是:read(byte[] bytes)它的返回值,表示当前这一次读取的字节个数。

4 FileInputStream读取全部字节

不管是一次读取一个字节,还是一次读取多个字节,都有可能有乱码。那么接下来我们介绍一种,不出现乱码的读取方式。

我们可以一次性读取文件中的全部字节,然后把全部字节转换为一个字符串,就不会有乱码了。

最后,还是要注意一个问题:一次读取所有字节虽然可以解决乱码问题,但是文件不能过大,如果文件过大,可能导致内存溢出。

复制代码
总结:
1. 如何使用字节输入流读取中文内容输出时不乱码呢?
    一次性读取完全部字节。
    可以定义与文件一样大的字节数组读取,也可以使用官方API.
2. 直接把文件数据全部读取到一个字节数组可以避免乱码,是否存在问题?
    如果文件过大,定义的字节数组可能引起内存溢出。

5 FileOutputStream写字节

使用FileOutputStream往文件中写数据的步骤如下:

复制代码
第一步:创建FileOutputStream文件字节输出流管道,与目标文件接通。
第二步:调用wirte()方法往文件中写数据
第三步:调用close()方法释放资源

6 字节流复制文件

复制文件的思路如下图所示:

复制代码
1.需要创建一个FileInputStream流与源文件接通,创建FileOutputStream与目标文件接通
2.然后创建一个数组,使用FileInputStream每次读取一个字节数组的数据,存如数组中
3.然后再使用FileOutputStream把字节数组中的有效元素,写入到目标文件中
相关推荐
百珏8 小时前
海量人群包存储优化:基于 RoaringBitmap 交换格式与 Redis 分片 Bitmap 的实践
java·后端·架构
weixin_408318049 小时前
教育行业直播系统搭建指南
java·大数据·数据库
小宋10219 小时前
Tycoon AI 新手快速上手指南
java·大数据·人工智能
java修仙传9 小时前
Java 实习日记:断面分析基态限额为空问题的排查与修复
java·开发语言·bug·实习
日取其半万世不竭9 小时前
Linux 云服务器磁盘扩容:从分区到文件系统的完整流程
java·linux·服务器
眷蓝天10 小时前
Prometheus介绍及监控平台部署
java·开发语言
he___H10 小时前
leetcode100-普通数组
java·数据结构·算法·leetcode
y = xⁿ10 小时前
JUC:锁机制/关键字
java·开发语言
Struggle_975510 小时前
算法知识-堆相关知识
java·开发语言·算法