Java IO流:基本概念

一、IO 概念

・I/O 即输入 Input/ 输出 Output 的缩写,其实就是计算机调度把各个存储中(包括内存和外部存储)的数据写入写出的过程;

・java 中用 “流(stream)” 来抽象表示这么一个写入写出的功能,封装成一个 “类”,都放在 java.io 这个包里面。

二、IO 流的分类

通过 “流” 的形式允许 java 程序使用相同的方式来访问不同的输入 / 输出源。stream 是从起源(source)到接收的(sink)的有序数据。我们这里把输入 / 输出源对比成 “水桶”,那么流就是 “管道”,这个 “管道” 的粗细、单向性等属性也就是区分了不同 “流” 的特性。

按照 流的方向 进行分类:
以内存作为参照物:

往内存中去:叫做输入 (Input)。或者叫做读 (Read)。

 

从内存中出来:叫做输出 (Output)。或者叫做写 (Write)。 

 

按照 读取数据方式 不同进行分类:
按照 字节 的方式读取数据,一次读取 1 个字节 byte,等同于一次读取 8 个二进制位。
这种流是万能的,什么类型的文件都可以读取。包括:文本文件,图片,声音文件,视频文件 等…

按照 字符 的方式读取数据的,一次读取一个字符。
这种流是为了方便读取普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件。只能读取纯文本文件,连 word 文件都无法读取。

注意:
纯文本文件,不单单是.txt 文件,还包括 .java、.ini、.py 。总之只要 能用记事本打开 的文件都是普通文本文件。

eg.
假设文件file1.txt,采用字符流的话是这样读的:
a中国bc张三fe
第一次读:'a’字符('a’字符在windows系统中占用1个字节。)
第二次读:'中’字符('中’字符在windows系统中占用2个字节。)

 综上所述:流的分类:

  • 输入流、输出流
  • 字节流、字符流

根据传输数据单位分为字节流和字符流

  • 字节流:以字节为单元,可操作任何数据(由 InputStream 和 outPutStream 作为基类)
  • 字符流:以字符为单元,只能操作纯字符数据,(由 Reader 和 Writer 作为基类)
  • 字节流
  1. java.io.InputStream 字节输入流
  2. java.io.OutputStream 字节输出流
  • 字符流
  1. java.io.Reader 字符输入流
  2. java.io.Writer 字符输出流

以上 4 个类都是抽象类。

所有的流都实现了:
java.io.Closeable 接口,所有流都实现 close () 方法。流是一个管道,是内存和硬盘之间的通道,用完之后一定要 close (),不然会耗费 (占用) 很多资源。用完流一定要关闭。
所有的输出流都实现了:
java.io.Flushable 接口,所有流都实现 flush () 方法。刷新 flush () 表示将通道 / 管道当中剩余未输出的数据强行输出完(清空管道!)刷新的作用就是清空管道。输出流在最终输出之后,一定要 flush () 刷新一下。

三、Java 要掌握的流(16 个)

文件专属:
java.io.FileInputStream
java.io.FileOutputStream
java.io.FileReader
java.io.FileWriter


转换流:(将字节流转换成字符流)
java.io.InputStreamReader
java.io.OutputStreamWriter


缓冲流专属:
java.io.BufferedReader
java.io.BufferedWriter
java.io.BufferedInputStream
java.io.BufferedOutputStream


数据流专属:
java.io.DataInputStream
java.io.DataOutputStream


标准输出流:
java.io.PrintWriter
java.io.PrintStream


对象专属流:
java.io.ObjectInputStream
java.io.ObjectOutputStream


File 文件类
java.io.File
 

后续章节会对以上流进行逐个介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达《机器学习》11-3-11-5:类偏斜的误差度量、查准率和查全率之间的权衡、机器学习的数据

一、类偏斜的误差度量 误差度量的关键性 之前的课程中已经提到了误差分析和设定误差度量值的重要性。评估学习算法并衡量其表现需要使用一个实数,这就是误差度量值。然而,在某些情况下,特别是当处理偏斜类时,选择正确的误差度量…

idea安装

1、下载插件 下载地址:https://plugins.zhile.io/files/ide-eval-resetter-2.1.6.zip 2、安装插件 直接下载插件 zip 包(macOS 可能会自动解压,然后把 zip 包丢进回收站) 通常可以直接把 zip 包拖进 IDE 的窗口来进行插件的安装…

如何使用Python核对文件夹内的文件

说明:日常工作中,我们经常会遇到这样的场景:核对A、B文件夹中文件的差异,找出A、B文件夹中不同部分的文件; 本文介绍如何使用Python来实现; 第一步:获取文件清单 首先,我们要获取…

Navicat 与 华为云 GaussDB 合作再升级,赋能 GaussDB 分布式数据库

2023 年第三季度,Navicat 首次支持了华为云 GaussDB 主备版数据库。经过双方团队进一步的深化合作,Navicat 完成了 GaussDB 分布式的研发适配工作,赋能 GaussDB 全域数据库产品。 GaussDB 数据库分为主备版和分布式版两种模式。主备版适用于…

软件即服务:改变传统软件交付模式的革命性商业模式

Software as a Service (SaaS)是一种流行的商业模式,它允许软件开发商通过互联网向用户提供软件服务,用户无需购买和维护软件本身。这种模式具有许多优势,包括降低成本、提高效率、增强安全性等。本文将探讨SaaS商业模式的概念、优势、应用和…

Spingboot 之spring-boot-starter-parent与spring-boot-dependencies区分

在创建spring boot工程时,spring-boot-starter-parent 和 spring-boot-dependencies是二选一的关系,在pom中引入其中一个就可以了。 那么什么时候用spring-boot-starter-parent 和 spring-boot-dependencies呢?从字面名称上看,如…

履带吊,笔记

0.前言 履带吊使用了与传统的门桥式起重机不同的技术路线。因为它是移动式设备,所以它的动力是燃油发动机。为了精确调控升降。它的整套动力系统似乎采用了某种液压传动系统。履带吊国内也有生产商。但是下文中,还是从国外的一款产品说起。这款产品的pd…

JDK7与JDK8中HashMap的区别

学习了HashMap JDK7和JDK8中的实现,现在让我们来总结下两者的区别. JDK7 HashMap // 数据结构 - 基于数组链表。 - 元素存储在 Entry 对象中,使用链表解决哈希冲突 // 扩容条件: - 在数组长度达到阈值且当前位置不为空时触发扩容。 // 扩容…

【无标题】Vue3想在scss中想使用动态的变量

Vue3想在css中想使用动态的变量 首先在组件中定义 :style"{ --custom-style-color: customStyle.color }",customStyle.color就是那个传过来的变量,也可以是自定义的-color 值 const props defineProps({customStyle: {type: Object,default: () >…

java面试题-Dubbo和openFeign怎么选择,优劣

远离八股文,面试大白话,通俗且易懂 看完后试着用自己的话复述出来。有问题请指出,有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来,大家一起解决。 java面试题汇总-目录-持续更新中 面试官:你在…

台灯护眼灯怎么挑选?考公必备护眼台灯推荐

台灯作为日常生活中比较常用的桌面照明工具,不管是上班族熬夜加班,还是学生党用于学习、备考都离不开它的身影。但是如何挑选一盏光源舒适的台灯,相信是很多小伙伴最为烦恼的一个问题!如果使用了一款质量不好,光源不达…

[数据结构]线性表1 C++编程作业

链表三插法详解&#xff1a; 链表的三种插入方法&#xff08;头插法&#xff0c;尾插法&#xff0c;任意位置插入&#xff09;_链表插入_夜路难行々的博客-CSDN博客 1使用头插法创建链表 #include <iostream> using namespace std;typedef struct Lnode{int data;stru…

排序:直接插入排序希尔排序

目录 排序&#xff1a; 概念&#xff1a; 直接插入排序&#xff1a; 代码的实现&#xff1a; 代码解析&#xff1a; 总结&#xff1a; 希尔排序&#xff1a; 代码实现&#xff1a; 预排序&#xff1a; 代码优化&#xff1a; gap 的 本质 &#xff1a; 直接…

【每日一题】最小化旅行的价格总和

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;深搜动态规划 写在最后 Tag 【深搜动态规划】【树】【2023-12-06】 题目来源 2646. 最小化旅行的价格总和 题目解读 有一棵无向、无根的树&#xff0c;树中的节点从 0 到 n-1&#xff0c;每个节点有一个关联的价格&a…

这款IDEA插件真的爱了

前言 Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款…

基于Java SSM毕业设计管理子系统

学校有若干系&#xff0c;每个系有若干专业&#xff0c;需要通过一个毕业设计管理子系统对毕业设计隋况进行管理。系统主要功能如下&#xff1a; 登记毕业设计题目&#xff0c;包括&#xff1a;编号、题目、类型、指导老师等。 老师信息包括&#xff1a;工号、姓名、性别、职称…

基于c++版本的数据结构改-python栈和队列思维总结

##栈部分-&#xff08;叠猫猫&#xff09; ##抽象数据类型栈的定义&#xff1a;是一种遵循先入后出的逻辑的线性数据结构。 换种方式去理解这种数据结构如果我们在一摞盘子中取到下面的盘子&#xff0c;我们首先要把最上面的盘子依次拿走&#xff0c;才可以继续拿下面的盘子&…

Java开源工具库Guava使用指南详解

Guava是Google开发的一套Java核心库&#xff0c;它提供了很多实用的工具类和方法&#xff0c;能够简化Java开发者的日常工作。下面是一些Guava的使用指南&#xff1a; 导入Guava库 在使用Guava之前&#xff0c;需要先将Guava库导入到项目中。可以在Maven或Gradle中添加以下依…

Postman可以卸载了!这款IDEA插件太好用了!

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

JIRA 禁用用户自动登录

概述 当用户登录 JIRA 时&#xff0c;他们可以通过在单击“Log In”按钮之前选中“Remember my login”复选框&#xff0c;让 JIRA 记住他们的登录信息。这样做之后&#xff0c;“Remember my login”令牌将由 JIRA 服务器存储&#xff0c;并且系统会在用户的浏览器中设置包含…