Java基础进阶IO流概述

简介: Java基础进阶IO流概述

1、IO流,什么是IO?


I : Input

O : Output


通过IO可以完成硬盘文件的读和写。


2、IO流的分类?


有多种分类方式:


一种方式是按照流的方向进行分类:


以内存作为参照物

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

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

另一种方式是按照读取数据方式不同进行分类:


有的流是按照字节的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制位。

这种流是万能的,什么类型的文件都可以读取。包括:文本文件,图片,声音文件,视频文件等…

假设文件file1.txt,采用字节流的话是这样读的:

a中国bc张三fe

第一次读:一个字节,正好读到’a’

第二次读:一个字节,正好读到’中’字符的一半。

第三次读:一个字节,正好读到’中’字符的另外一半。

有的流是按照字符的方式读取数据的,一次读取一个字符,这种流是为了方便读取

普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件。只能读取纯文本文件,连word文件都无法读取。

假设文件file1.txt,采用字符流的话是这样读的:

a中国bc张三fe

第一次读:'a’字符('a’字符在windows系统中占用1个字节。)

第二次读:'中’字符('中’字符在windows系统中占用2个字节。)

综上所述:流的分类

输入流、输出流

字节流、字符流


3、Java中的IO流都已经写好了,我们程序员不需要关心,我们最主要还是掌握,

在java中已经提供了哪些流,每个流的特点是什么,每个流对象上的常用方法有

哪些?


java中所有的流都是在:java.io.*;下。


java中主要还是研究:

怎么new流对象。

调用流对象的哪个方法是读,哪个方法是写。


4、java IO流这块有四大家族:

四大家族的首领:


java.io.InputStream  字节输入流

java.io.OutputStream 字节输出流


java.io.Reader  字符输入流

java.io.Writer  字符输出流


四大家族的首领都是抽象类。(abstract class)


所有的流都实现了:


java.io.Closeable接口,都是可关闭的,都有==close()==方法。

流毕竟是一个管道,这个是内存和硬盘之间的通道,用完之后一定要关闭,

不然会耗费(占用)很多资源。养成好习惯,用完流一定要关闭。

所有的输出流都实现了:


java.io.Flushable接口,都是可刷新的,都有flush()方法。

养成一个好习惯,输出流在最终输出之后,一定要记得flush()

刷新一下。这个刷新表示将通道/管道当中剩余未输出的数据

强行输出完(清空管道!)刷新的作用就是清空管道。

注意:如果没有flush()可能会导致丢失数据。

注意:在java中只要“类名”以Stream结尾的都是字节流。以“Reader/Writer”结尾的都是字符流。


5、java.io包下需要掌握的流有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(掌握)


相关文章
|
16天前
|
IDE Oracle Java
java基础教程(1)-Java概述和相关名词解释
【4月更文挑战第1天】Java是1995年Sun Microsystems发布的高级编程语言,以其跨平台特性著名。它介于编译型和解释型语言之间,通过JVM实现“一次编写,到处运行”。Java有SE、EE和ME三个版本,分别针对标准、企业及嵌入式应用。JVM是Java虚拟机,确保代码在不同平台无需重编译。JRE是运行环境,而JDK包含开发工具。要安装Java开发环境,可从Oracle官网下载JDK,设置JAVA_HOME环境变量并添加到PATH。
|
1月前
|
存储 Java 数据处理
|
20天前
|
缓存 安全 Java
Java并发编程进阶:深入理解Java内存模型
【4月更文挑战第6天】Java内存模型(JMM)是多线程编程的关键,定义了线程间共享变量读写的规则,确保数据一致性和可见性。主要包括原子性、可见性和有序性三大特性。Happens-Before原则规定操作顺序,内存屏障和锁则保障这些原则的实施。理解JMM和相关机制对于编写线程安全、高性能的Java并发程序至关重要。
|
2天前
|
Java API 调度
[AIGC] 深入理解Java并发编程:从入门到进阶
[AIGC] 深入理解Java并发编程:从入门到进阶
|
21天前
|
存储 Java
探索 Java IO 流的多种实现方式
【4月更文挑战第4天】Java IO 流是处理输入输出的关键组件,包括文件流(FileInputStream/FileOutputStream)、字符流(FileReader/FileWriter)、缓冲区流(BufferedInputStream/BufferedOutputStream)、转换流(InputStreamReader/OutputStreamWriter)、数据流(DataInputStream/DataOutputStream)、对象流(ObjectInputStream/ObjectOutputStream)、随机访问文件流(RandomAccessFile)和管道流。
|
23天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
24 4
|
29天前
|
SQL 前端开发 Java
Java后端进阶之路: JavaWeb(四)
Java后端进阶之路: JavaWeb
33 1
|
XML SQL Java
Java后端进阶之路: JavaWeb(三)
Java后端进阶之路: JavaWeb
30 1
|
1月前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
52 2
|
1月前
|
Java
JAVA异常概述
JAVA异常概述
8 1