首页 > 编程语言 >5:IO Stream-Java API 实战

5:IO Stream-Java API 实战

时间:2022-12-05 18:31:39浏览次数:59  
标签:文件 Java 字节 Stream 数据源 API IO 输入 读取

(目录)

1. 相对论和IO流之说

Input/Output Stream

  • 词典中Stream的意思是有方向性的流动的液体/电流,强调过程
  • 理解I/O Stream可以看作是输入/输出方向的流体

在这里插入图片描述

从相对论的角度看待 I/O流

  • 冬天旱季的时候,支流把水输出到长江中,长江输入这些水
  • 夏季雨季的时候,支流转换角色输入这些水,而长江输出这些水
  • 流必须要有管道,流动一定会有输出口和输入口,而谁输出、谁输入要看你选定的参照系

在这里插入图片描述

2. 汉语文学理解IO流

  • 解释流这个词,像水流的东西输入/输出
  • 有一个物体会流动,像水一样,有输入和输出两种方式或者两种方向

在这里插入图片描述

3. 图解IO流

I/O Stream 文档中的两幅图

详见:I/O Streams (The Java™ Tutorials > Essential Java Classes ...

在这里插入图片描述 Reading information into a program 读数据,数据源数据流到了程序中,对于程序是input,对于数据源是output,是程序在读取数据源中的数据

在这里插入图片描述 Writing information from a program 写数据,程序数据流到了数据源中,对于程序是output,对于数据源是input,是程序在往数据源中写数据

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

4. 俩亲爹:InputStream和OutPutStream

终极静态父类

  • I/O流就是用来管理各种数据的输入和输出,在这个包中有两个终极静态父类,InputStreamOutputStream
  • 这两个类提供和数据操作相关的方法,后有其他不同类型的数据控制子类来继承这两个类

InputStream专门管理数据的读相关操作 在这里插入图片描述

OutputStream专门管理数据的写相关操作 在这里插入图片描述

5. FileInputStream字节流读取文件

参考:java基础知识之FileInputStream流

文件读取流,创建一个file文件夹,将其作为Resources Root目录 在这里插入图片描述file文件夹下创建1.txt文件,随便写入一点东西,.read()方法是按照字节的二进制形式一个一个读取的,如果不想看到ASCII码,就需要将它转换成(char)类型,在代码的末尾要加上.close() 关闭程序

在这里插入图片描述

6. FileOutPutStream字节流写入文件

文件输出流,创建2.txt空文件,.write()方法读取整个字节数组,不需要使用for循环也能全部写入文件 在这里插入图片描述 在这里插入图片描述

7. buff缓冲复制文件

引出缓冲概念

  • 文件流的读取是一个一个字节读的,写也是一个一个字节写,是否可以将读文件的字节传输到写文件的字节流里面,相当于完成文件的复制呢?
  • buff就相当于缓冲,搬箱输入与输出,复制文件就不需要一个字节一个字节传了

在这里插入图片描述

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

引出缓冲区

  • 在原来的读写文件中按单个字节的方式速度很慢,加了缓冲区以后,一次性读1024个字节,这样就会更快
  • Buffer 类是 java.nio 的构造基础,一个 Buffer 对象是固定数量的数据的容器,其作用是一个存储器或者分段运输区,数据可被存储并在之后用于检索

BufferInputStream源码中这是缓冲输入流一次性读取8192个字节流

在这里插入图片描述

装饰模式

  • 又名包装(Wrapper)模式。装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案

以复制文件函数为例,在这里不能直接将path路径传入到BufferedInputStream,而是使用了文件输入输出流创建的对象。BufferedInputStream中接收的是对象而不是字符串,这就叫装饰设计模式 在这里插入图片描述

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

  • FileReader类从InputStreamReader类继承而来。该类按字符读取流中数据
  • FileWriter 类从OutputStreamWriter 类继承而来。该类按字符向流中写入数据

这两种流非常适合用来读取文本文件一类的文件,不需要再设置字节数组来进行读取,在写文件的时候也不需要获取字符串的字节流 在这里插入图片描述

10. BufferedReader、BufferedWriter

BufferedReader可以直接读取一行的信息

在这里插入图片描述 BufferedWriter也非常简单,但要注意把流关闭,特别是写文件的时候,如果没关,写出来的文件中不会有内容显示 在这里插入图片描述

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

各种流的体验

12. Apache Common IO

Apache Commons IO是对java.io的扩展,其对IO封装了一些好用的工具类,只需要少量的代码就能完成大量的IO操作

Apache Common IO下载详见:Apache Commons IO

在这里插入图片描述 例如要写入数据,只需一行代码就能搞定了,其它相关方法可以自行学习 在这里插入图片描述

13. IO流结束语

标签:文件,Java,字节,Stream,数据源,API,IO,输入,读取
From: https://blog.51cto.com/yeatsliao/5913241

相关文章

  • JavaScript习题之算法设计题
    //1.九九乘法表for(vari=1;i<10;i++){document.write("<span>");for(varj=1;j<=i;j++){if(j%2==0){......
  • JavaScript习题之填空题
    1.JavaScript有两种引⽤数据类型:__数组___、__对象__。2.Javascript通过__setTimeout___延迟指定时间后,去执⾏某程序。3.Javascript⾥String对象通过__indexOf__⽅法取......
  • Web API-day02
    WebAPI第二天>>>>>>>事件什么是事件?事件是在编程时系统内发生的动作或者发生的事情比如用户在网页上单击一个按钮什么是事件监听?就是让程序检测是否有事件产生,一......
  • JavaScript习题之判断题
    1.JavaScript是Java语言的脚本形式。()2.JavaScript中的方法名不区分大小写。()3.JavaScript语句结束时的分号可以省略。()4.通过外链式引入JavaScript时,可以省略</scr......
  • JavaScript习题之简答题
    1.分别描述HTML、CSS、JS在页面组成中的作用。HTML是超文本标记语言,是用来描述网页的语言,定义网页的结构,内容可以包含文字、图片、视频等。CSS是层叠样式表,定义如何显示HT......
  • LeetCode:295. Find Median from Data Stream
    LeetCode:295.FindMedianfromDataStream题目描述Medianisthemiddlevalueinanorderedintegerlist.Ifthesizeofthelistiseven,thereisnomiddleval......
  • Java 编程基础01
    一、Java开发环境搭建1、开发工具的下载和安装   1)下载方式一:官网下载www.sun.com     www.oracle.com   2)下载方式二:通过搜索下载www.baidu.c......
  • JavaScript习题之选择题
    console.log((2==true)+1)会弹出AtrueBfalseC1D2正确答案:C2==true为假,此时值为0 在JS中,“1555”+3的运行结果是A1558B1552C15553D1553正确答案:C解析:155......
  • 常用API
    API(ApplicationProgrammingInterface):应用程序编程接口JavaAPI:指的就是JDK中提供的各种功能的Java类。Scanner一个简单的文本扫描程序,可以获取基本类型数据......
  • Java图形化设计
    Java图形化设计能够实现图形界面的类库:java.awtjavax.swing使用方法同其他包使用方法一样improtJava.awt.*;importjavax.swing.*;关于两种类库的区别java.a......