5:IO Stream-Java API 实战

2023-05-16

目录

  • 1. 相对论和IO流之说
  • 2. 汉语文学理解IO流
  • 3. 图解IO流
  • 4. 俩亲爹:InputStream和OutPutStream
  • 5. FileInputStream字节流读取文件
  • 6. FileOutPutStream字节流写入文件
  • 7. buff缓冲复制文件
  • 8. buffered字节缓冲流、装饰设计模式
  • 9. FileReader和FileWriter,俩专门来搞定txt文件
  • 10. BufferedReader、BufferedWriter
  • 11. 一次性讲解剩余的N个流(扩展课)Java里那些极其骚的IO流
  • 12. Apache Common IO
  • 13. 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流结束语

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5:IO Stream-Java API 实战 的相关文章

  • XSD 验证错误:在 web.xml 中找不到 TagLib 标记

    我详细显示错误如下 cvc complex type 2 4 a 发现以元素开头的无效内容 taglib One of http java sun com xml ns javaee 描述 http java sun com xml ns
  • 如何制作具有两个索引的 Map?

    我在java中有一张这样的地图 Map
  • Java 延迟/等待

    如何将 while 循环延迟到 1 秒间隔 而不减慢其运行的整个代码 计算机的速度到一秒延迟 只是一个小循环 Thread sleep 1000 do nothing for 1000 miliseconds 1 second
  • JCombobox 字符串项(可见)和整数键(固有)

    我有一个数据库模式 它将作为 JTable 列显示在 JCombobox 中以选择名称 但我希望将 ID 字段插入 作为外键 到另一个表中 通常 在下拉列表中选择一个项目 将所选项目带到组合框的显示区域 我想要做的是 当选择组合框中的任何项
  • 使用 Bouncy Castle 重建 ED25519 按键 (Java)

    Bouncy Castle 的最新 测试版 版本 bcprov jdk15on 161b20 jar 支持 ED25519 和 ED448 EC 加密以进行签名 我设置了这个完整的工作示例 它按预期工作 我的问题 我是否正确重建了私钥和公钥
  • HashMap何时以及如何将桶从链表转换为红黑树? [复制]

    这个问题在这里已经有答案了 我正在研究 java 8 功能 发现当存储桶上的条目集数量增加时 哈希图使用红黑树而不是链表 但是 这是否不需要密钥是可比较的或存在某种密钥排序以及这是如何工作的 这种转变何时真正发生以及如何发生 当有at le
  • Java生成范围内不重复的随机数

    我想生成 1 到 4 范围内的随机数 包括 4 这是我的代码 int num r nextInt 4 1 r is instance of Random 但是 我在循环中运行上述代码 并且不想重复随机数 现在发生的事情我经常得到 1 1 1
  • Java Sound可以用来控制系统音量吗?

    Java 声音优惠FloatControl各种声音线路功能的实例 以及MASTER GAIN http docs oracle com javase 7 docs api javax sound sampled FloatControl T
  • 注释处理器可以用于代码生成吗?

    假设我定义了一个名为 MyAnnotation 有一个班级X其声明为 MyAnnotation class X 现在在编译时我想检查所有带有注释的类 MyAnnotation并对更多需要在同一进程中编译的 java 源文件进行一些代码生成
  • Java 中内存高效的稀疏数组

    关于时间高效的稀疏数组存在一些问题 但我正在寻找内存效率 我需要相当于List
  • File.ReadAllLines 或流读取器

    我们可以使用以下方式读取文件StreamReader http msdn microsoft com en us library vstudio system io streamreader或通过使用File ReadAllLines ht
  • 无法在android中使用retrofit发出@Post请求

    我正在学习如何在 android 中使用改造 但是每当我尝试从互联网检索数据时 我的应用程序不会返回任何内容我的响应没有成功 我不知道如何修复当前我正在尝试发布的错误并使用此 URL 检索数据https jsonplaceholder ty
  • 公共领域有哪些替代方案?

    我正在用 java 编写一个游戏 正如问题标题建议的那样 我在类中使用公共字段 暂且 据我所知 公共领域很糟糕 我有一些理解其中的原因 但如果有人能澄清为什么你不应该使用它们 那将不胜感激 问题是 从我所看到的来看 这似乎是合乎逻辑的 是使
  • 字节流和字符流

    请解释一下什么是字节流和字符流 这些究竟意味着什么 Microsoft Word 文档是面向字节的还是面向字符的 Thanks 流是一种顺序访问文件的方式 字节流逐字节访问文件 字节流适用于任何类型的文件 但不太适合文本文件 例如 如果文件
  • 如何将空字符串序列化为单个空标签?

    我使用 Simple XML 框架序列化此类 Root public class HowToRenderEmptyTag Element required false private String nullString 我想得到
  • 使用 java 中的准备好的语句插入自定义 SQL 类型

    我有一些自定义类型 它们基本上都是枚举 以下是它们的外观示例 CREATE TYPE card suit AS ENUM spades clubs hearts diamonds 我在 Java 中有一些准备好的语句 看起来像这样 Setu
  • Jackson 中没有注释的多态反序列化

    我有一个CloudEvent
  • 未找到 GroovyEvaluator

    我会尝试在以下位置制作我的 PIE 3D 报告iReport 在我的 struts xml 中 我用这个来调用我的报告
  • 无法验证 serde:org.openx.data.jsonserde.jsonserde

    我编写了这个查询来在配置单元上创建一个表 我的数据最初是 json 格式 所以我已经下载并构建了 serde 并添加了它运行所需的所有 jar 但我收到以下错误 FAILED Execution Error return code 1 fr
  • 如果垃圾收集器没有删除未引用的对象,它们还能运行吗?

    如果一个对象正在等待垃圾收集 但包含一个在该对象的最后一个引用更改时正在运行的线程 那么该线程是否仍会运行并且代码是否仍会执行 那么您是否可能有一堆应该删除的幽灵对象 但它们对您的代码产生了影响 你如何防止这种情况发生 有没有办法让对象知道

随机推荐

  • 1:VMware虚拟机的使用-步入Linux的现代方法

    目录 1 1 Vmware虚拟机1 2 VMware 161 3 关于从15更新到16的说法 1 1 Vmware虚拟机 安装系统的方式 实体机双系统虚拟机 详见 xff1a VMware Workstation 虚拟机权威指南 零基础虚拟
  • 2:发行版本安装演示——Ubuntu、CentOS、Kali?-步入Linux的现代方法

    目录 2 1 先尝试Ubuntu2 2 VMware Tools2 3 Ubuntu 20 04设置2 4 Linux其他发行版本的安装指导2 5 下载指导 2 1 先尝试Ubuntu 详见 xff1a Linux Ubuntu 零基础体验
  • 3:步入Linux的世界-步入Linux的现代方法

    目录 3 1 Linux究竟需要我们学习什么 xff1f Linux四大组成部分3 2 Linux是命令还是图形界面 xff1f GUI 是什么 xff1f 那GNU是什么东西 xff1f GNU Linux 和Linux有什么区别 xff
  • Linux中 sudo su 和 su 区别

    su 直接切换root用户 xff0c 需输入root密码ubuntu xff0c 默认没有设置root密码 xff0c 使用sudo passwd root设置root密码 sudo su 当前用户暂时申请root权限 xff0c 需输入
  • Python 使用 Qt5 实现水平导航栏

    在 Qt5 中可以使用 QWidget 包含两个水平布局 xff0c 通过点击水平布局里的按钮 xff0c 实现下标滑动与页面的切换 可以按照以下步骤来实现上面图片中的功能 xff1a 导入必要的 Qt 包 xff1a span class
  • OOP上半部分-Java与生活

    目录 1 1 1 问题产生和引导1 1 2 烦人1 1 3 变换思维1 1 4 规划明确目标站在更高层次思考问题1 1 5 上代码 xff0c 设计体验面向对象编程 xff0c 实例和对象1 1 6 去你md成员变量行为类和this1 1
  • Centos7 搭建Jupyter NoteBook教程

    目录 1 Anaconda31 1 下载1 2 安装 2 环境配置2 1 添加PATH到 root bashrc文件中2 2 激活配置的环境变量 3 搭建虚拟环境3 1 创建虚拟环境3 2 开启环境3 3 查看已有的虚拟环境 4 jupyt
  • OOP下半部分-Java与生活

    目录 面向对象三大特性 xff1a 封装 继承 多态2 1 1 需求重定义2 1 2 继承2 2 2 饿狼传说之多层继承2 2 3 方法的重写2 2 4 super啃老2 2 5 啃老啃到彻底2 2 6 final2 2 7 提出新的问题2
  • Centos7 搭建单机Spark分布式集群

    目录 1 JDK Hadoop Spark安装与配置1 1 解压包1 2 配置环境变量 2 Scala安装与配置2 1 Scala安装2 2 配置环境变量 3 配置集群3 1 配置sprak3 2 启动spark 4 问题 xff1a 虚拟
  • 面向对象大胆向前 Java API 实战

    目录 0 xff1a Base API 引言API的定义和用处ScannerNumberMathRandomThreadLocalRandomDateDateFormat和SimpleDateFormatCalendarSystem 详见
  • Yeats_Liao的书单

    计算机软件类 大话计算机 冬瓜哥 架构师的自我修炼 李智慧 图解算法 xff1a 使用C语言 吴灿铭 胡昭民 编程原则 马克思 卡纳特 亚历山大 啊哈 xff01 算法 啊哈磊 Java Web框架开发技术 Spring 43 Spring
  • 0:Base API-Java API 实战

    目录 0 1 引言0 2 API的定义和用处0 3 Scanner xff08 普通类 xff09 0 4 Number xff08 包装类 xff09 0 5 Math xff08 工具类 xff09 0 6 Random xff08 父
  • 黑客与画家 [美] Paul Graham 读书摘录

    充分理解程序员带来的美和智慧 xff0c 这是本书做到的 P15 为什么书呆子不受欢迎 xff1f 平庸带来的严重后果 xff0c 直接导致学生的叛逆心理 我误解最深的一个词是 老成 tact 成年人使用这个词 xff0c 含义似乎就是 闭
  • 教育的真谛 [英] 尼古拉斯·泰特 读书摘录

    自柏拉图以来 xff0c 教育的目的与性质始终是西方哲学传统关注和探讨的问题 纵览2500年来的思想成果 xff0c 作者尼古拉斯 泰特博士在 教育的真谛 xff1a 伟大思想家的观点及其现实意义 中指出 xff0c 人类的教育活动至少应包
  • 1:Unit test and main function-Java API 实战

    目录 1 抛出企业问题 xff0c 脱离main测试 xff0c 模块化编程2 Junit单元测试的含义和用途3 怎么获取各种Jar包 xff1f Maven Repository 获取各类各个版本的jar xff0c 这就是仓库 脱离老师
  • CentOS 安装 Samba服务器(多用户组、多用户有不同的访问权限)

    增加smb用户 root 64 localhost sir01 smbpasswd a linuxsir 查看 smb 现有用户 pdbedit L 验证用户登录文件夹 smbclient 192 168 101 93 forlder U
  • 2:StringBuilder-Java API 实战

    目录 1 String存在的问题2 Stringbuilder以及链式调用的含义 1 String存在的问题 认识String 字符串广泛应用在编程中 xff0c 在 Java 中字符串属于对象 xff0c Java 提供了 String
  • 3:Throwable-Java API 实战

    目录 1 异常的介绍2 异常举例以及解决常见错误bug方案3 RuntimeException4 trycatch作用 xff0c 闲扯淡诱骗毕业设计5 NullPointerException空指针异常6 throws7 throws和t
  • 4:File-Java API 实战

    目录 1 引言2 绝对路径和相对路径 xff1f 先学送快递吧 xff01 3 绝对路径4 相对路径5 File类6 Linux上的绝对路径有所不同 1 引言 文件要区别绝对路径和相对路径 xff0c 在Win系统中的文件路径和Linux
  • 5:IO Stream-Java API 实战

    目录 1 相对论和IO流之说2 汉语文学理解IO流3 图解IO流4 俩亲爹 xff1a InputStream和OutPutStream5 FileInputStream字节流读取文件6 FileOutPutStream字节流写入文件7 b