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把字节数组中的有效元素,写入到目标文件中
相关推荐
秋名RG14 小时前
Java 核心特性一览
java·开发语言
霸道流氓气质14 小时前
Spring AI 技术细节:RAG QuestionAnswerAdvisor 设计与实现
java·人工智能·spring
斑马13914 小时前
Linux软件编程学习笔记(十二)——TCP并发服务器模型
java·服务器·网络
冬栈程序设计14 小时前
Springboot宿舍管理系统【670099】 -附源码(开箱即用)
java·毕业设计·springboot·课程设计·程序设计·大作业
2601_9622845014 小时前
北京Java全栈开发培训 Web前端开发 软件测试就业培训班
java·软件测试·web前端·全栈开发·就业培训
qiaosaifei15 小时前
JAVA老项目中有大量的类名_编译时报找不到符号错误
java·开发语言
聪明蛋子哟15 小时前
MCP协议深度落地:如何用Python/Java双语言实现统一的工具调用网关?
java·开发语言·python
文子越来越强15 小时前
【双因子认证】拦截注解@MFACheck 接入指南(其他微服务如何用)
java
ZGG00315 小时前
线程池详解:从 7 大参数到生产避坑
java·数据库·后端
迪康Defender16 小时前
公用电脑责任追溯难?迪康端点安全一体化管理系统用户模式详解
java·运维·开发语言·网络·其他·安全