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把字节数组中的有效元素,写入到目标文件中
相关推荐
认真的酒窝6 小时前
自己动手开发编译器(十一)语义分析
java·开发语言
wbs_scy7 小时前
Linux C++ 高并发编程:线程池全链路深度解析,从原理到手撕实现
java·开发语言
JAVA面经实录9177 小时前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
Full Stack Developme9 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
程序员老油条11 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
shushangyun_12 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..12 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
学渣超13 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构
掉鱼的猫13 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·llm·aigc
带刺的坐椅13 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·ai·llm·agent·solon-ai