IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 5:IO Stream-Java API 实战 -> 正文阅读

[Java知识库]5:IO Stream-Java API 实战

1. 相对论和IO流之说

英文 Input/Output Stream
词典中Stream的意思:有方向性的流动的液体/电流
强调过程
在这里插入图片描述

那我们理解I/O Stream是否可以看作是输入/输出方向的流体

从相对论的角度看待 I/O流
冬天旱季的时候,长江的支流把水输出到长江中,长江输入这些水

夏季雨季的时候,长江的支流转换角色输入这些水,而长江输出这些水

当然这个比喻可能打的不是很好,但是我们可以看到作为输入方还是输出方并不是绝对的,而是相对的。

总结:
必须要有管道
相对谁来说,谁是输入输出
流动一定会有输出口和输入口
而且谁输出谁输入要看你选定的参照系

2. 汉语文学理解IO流

在这里插入图片描述
我觉得这个解释是比较时候来解释I/O流这个名词的:像水流的东西输入/输出

总结:不管是中文还是英文的解释(仅代表个人)都表明了两件事

有一个物体会流动,像水一样
有输入和输出两种方式或者两种方向

3. 图解IO流

I/O Stream 文档中的两幅图
在这里插入图片描述
Reading information into a program.这是官方文档对这张图的解释,对于程序来说是input对于数据源来说是output,所以说是程序在读取数据源中的数据。

在这里插入图片描述
Writing information from a program而与上面相反,这次的程序数据流到了数据源中,所以程序在output而数据源在input,这个时候程序在往程序中灌输数据,所以说是程序在写数据源中的数据。

上面两种方式都是站在程序的角度上对数据源的操作,所以我们的参照物是程序,因为我们操纵的就是程序

4. 俩亲爹:InputStream和OutPutStream

上面两节的解释中,我们能了解到 I/O流就是用来管理各种数据的输入和输出,所以在这个包中有两个终极静态父类:inputStream和outputStream,这两个类提供和数据操作相关的方法,后有其他不同类型的数据控制子类来继承这两个类。

inputStream:专门管理数据的读相关操作

outputStream:专门管理数据的写相关操作

5. FileInputStream字节流读取文件

上面有两个读取方式,一个读出的是文字,另外一个读出的全部是字节,在看源码的时候和源码的注释都说明了这个类是按照字节读的,下面这段代码会比较直观

在这里插入图片描述
在这里插入图片描述

.read()按照字节的二进制形式一个一个读

如果我们不想看到ASCII码就需要将它装换成char类型,就像体验中的第一种方式那样

注意:在代码的末尾都要加上xxx。close();不然运行结果出来以后,程序不会关闭

6. FileOutPutStream字节流写入文件

代码体验
在看frank的课前对这个类的体验

体验: CSDN博客https://blog.csdn.net/ai_bao_zi/article/details/81097898

在这里插入图片描述
在这里插入图片描述

更直观的例子
在这里插入图片描述
暂时不知道用处

查看源码

在这里插入图片描述

观看frank视频

我自己尝试的文件输出流(当给写方法的时候不需要使用for循环)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

直接使用写函数,读取整个字节数组

7. buff缓冲复制文件

没有听缓冲的时候
综合思考:

1.综合FileInputStream和FileOutputStream的特性我们可以看出:文件流的读取是一个一个字节读的,写也是一个一个字节写。

2.要复制一个文件先要读取这个文件的内容,再将这些内容写入一个新的文件中。

那我们是否可以将文件读文件的字节传输到写文件的字节流里面

在这里插入图片描述

在这里插入图片描述
buff就相当于缓冲,搬箱,不需要一个字节一个字节传
在这里插入图片描述

8. buffered字节缓冲流、装饰设计模式

复制文件的代码是自己写了缓冲区,什么是缓冲区呢?在原来的读写文件中是,按字节读也是按字节写的,速度很慢,但是在上面我们加了一个缓冲以后,它是一次性读1000个字节,这样就会更快。

而jdk的源码中也是有缓冲输出输入流这样的概念的:这是缓冲输入流,这里的一次性读取8192个字节流

在这里插入图片描述

使用这个方法写出来的复制文件函数:在这里面我们不能直接将我们的path路径传入到BufferedInputStream而是使用了文件输入输出流创建的对象。因为BufferedInputStream中接收的是对象而不是字符串,这就涉及到了一个设计模式叫装饰设计模式

在这里插入图片描述

在这里插入图片描述

9. FileReader和FileWriter,俩专门来搞定txt文件

上述的流都是使用字节来读,但是这个是读字符,这种流非常适合用来读取文本文件一类的文件。

字符流
其实这个流也是以上面的流文件作为基础,将字节读取封装成字符读取。

下面先看看

在这里插入图片描述

代码和原来的比起来是更加简洁了一些,不需要再设置字节数组来进行读,在写文件的时候也不需要获取字符串的字节流

10. BufferedReader、BufferedWriter

Buffe VIP 更进一步 更好使用
可以直接读一行,而且输出的时候也是一行输出,这样的使用感受就会更好的了

在这里插入图片描述
使用写也会非常的简单
在这里插入图片描述

注意:不管什么时候都要记得把流关闭,特别是写文件的时候,如果写文件没有关闭,写出来的文件中不会有内容显示

11. 一次性讲解剩余的N个流(扩展课)Java里那些极其骚的IO流

各种流的体验

12. Apache Common IO

Apache Commons IO

在这里插入图片描述

13. IO流结束语

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章           查看所有文章
加:2022-03-24 00:21:20  更:2022-03-24 00:25:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:28:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码