【Java I/O 流】I/O 流的原理与流的分类

简介: 所谓 I/O 是 Input/Output 的缩写,即输入/输出。I/O 技术用于处理数据的传输,文件的读写等。数据传输可以看做是一种数据的流动,而流(Stream)可以理解为数据传输时的序列。按照数据的“流向”,流可分为输入流和输出流。

在这里插入图片描述

❤️ 个人主页:水滴技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏:Java 教程:从入门到精通

大家好,我是水滴~~

今天一起看一下I/O 流的原理,以及流的各类。

什么是 I/O 流

所谓 I/O 是 Input/Output 的缩写,即输入/输出。I/O 技术用于处理数据的传输,文件的读写等。
数据传输可以看做是一种数据的流动,而流(Stream)可以理解为数据传输时的序列。按照数据的“流向”,流可分为输入流输出流

我们的 Java 程序是运行在内存中的,而文件是存储在磁盘中。那么 Java 程序读取文件内容时,是将文件中数据从磁盘传输至内存中,即输入流;而 Java 程序向文件写入内容时,是将数据从内存传输至文件中,即输出流。

在这里插入图片描述
可以这样来加强记忆:

流是以 Java 程序作为参照,“流入”的数据序列称为输入流,“流出”的数据序列称为输出流。

流的分类

  • 按数据流的流向可分为:输入流输出流
  • 按传输的数据单位可分为:字节流字符流

字节流:数据的读写以字节为单位,适用于二进制文件类型的数据读写,如:图片、视频等。
字符流:数据的读写以字符为单位,适用于文本类型的数据读写,例如:txt、html等。

Java 为我们提供四个基础抽象类,用于操作字符流和字节流,如下表:

# 字节流 字符流
输入流 InputStream(字节输入流) Reader(字符输入流)
输出流 OutputStream(字节输出流) Writer(字符输出流)

这四个抽象类又有很多实现类,可以应用在不同的场景中,如下图:
在这里插入图片描述


后面会专门出一系列的文章,来讲述每一种实现类的使用和应用案例。

在这里插入图片描述

相关文章
|
8天前
|
Java
java基础(8)数据类型的分类
Java数据类型分为基本数据类型(8种)和引用数据类型。基本类型包括byte, short, int, long, float, double, boolean, char。每种类型有固定占用空间大小,如int占用4字节。字符编码如ASCII和Unicode用于将文字转换为计算机可识别的二进制形式。
41 2
|
8天前
|
存储 Java
java基础(7)变量以及变量的分类
Java变量是内存中存储数据的基本单元,包含数据类型、名称和字面值。变量的数据类型决定了分配的内存空间大小。变量声明格式为“数据类型 变量名;”,变量名应符合标识符命名规范。变量可以重新赋值,但数据类型需一致。变量可以一行声明多个,作用域决定了变量的可用范围。变量分为局部变量和成员变量,局部变量定义在方法体内,成员变量定义在方法体外、类体内。
23 2
|
15天前
|
安全 Java API
JAVA并发编程JUC包之CAS原理
在JDK 1.5之后,Java API引入了`java.util.concurrent`包(简称JUC包),提供了多种并发工具类,如原子类`AtomicXX`、线程池`Executors`、信号量`Semaphore`、阻塞队列等。这些工具类简化了并发编程的复杂度。原子类`Atomic`尤其重要,它提供了线程安全的变量更新方法,支持整型、长整型、布尔型、数组及对象属性的原子修改。结合`volatile`关键字,可以实现多线程环境下共享变量的安全修改。
|
2月前
|
监控 算法 Java
Java内存管理:垃圾收集器的工作原理与调优实践
在Java的世界里,内存管理是一块神秘的领域。它像是一位默默无闻的守护者,确保程序顺畅运行而不被无用对象所困扰。本文将带你一探究竟,了解垃圾收集器如何在后台无声地工作,以及如何通过调优来提升系统性能。让我们一起走进Java内存管理的迷宫,寻找提高应用性能的秘诀。
|
11天前
|
算法 Java
JAVA并发编程系列(8)CountDownLatch核心原理
面试中的编程题目“模拟拼团”,我们通过使用CountDownLatch来实现多线程条件下的拼团逻辑。此外,深入解析了CountDownLatch的核心原理及其内部实现机制,特别是`await()`方法的具体工作流程。通过详细分析源码与内部结构,帮助读者更好地理解并发编程的关键概念。
|
10天前
|
Java
JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析
本文介绍了拼多多面试中的模拟拼团问题,通过使用 `CyclicBarrier` 实现了多人拼团成功后提交订单并支付的功能。与之前的 `CountDownLatch` 方法不同,`CyclicBarrier` 能够确保所有线程到达屏障点后继续执行,并且屏障可重复使用。文章详细解析了 `CyclicBarrier` 的核心原理及使用方法,并通过代码示例展示了其工作流程。最后,文章还提供了 `CyclicBarrier` 的源码分析,帮助读者深入理解其实现机制。
|
3天前
|
安全 Java 编译器
Java反射的原理
Java 反射是一种强大的特性,允许程序在运行时动态加载、查询和操作类及其成员。通过 `java.lang.reflect` 包中的类,可以获取类的信息并调用其方法。反射基于类加载器和 `Class` 对象,可通过类名、`getClass()` 或 `loadClass()` 获取 `Class` 对象。反射可用来获取构造函数、方法和字段,并动态创建实例、调用方法和访问字段。虽然提供灵活性,但反射会增加性能开销,应谨慎使用。常见应用场景包括框架开发、动态代理、注解处理和测试框架。
|
8天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
13 2
|
10天前
|
Java
Java的aop是如何实现的?原理是什么?
Java的aop是如何实现的?原理是什么?
15 4
|
14天前
|
存储 Java
JAVA并发编程AQS原理剖析
很多小朋友面试时候,面试官考察并发编程部分,都会被问:说一下AQS原理。面对并发编程基础和面试经验,专栏采用通俗简洁无废话无八股文方式,已陆续梳理分享了《一文看懂全部锁机制》、《JUC包之CAS原理》、《volatile核心原理》、《synchronized全能王的原理》,希望可以帮到大家巩固相关核心技术原理。今天我们聊聊AQS....
下一篇
无影云桌面