java io读取常用类

BufferedReaderInputStreamReaderFileInputStream 是 Java I/O 流的一部分,它们的实现原理基于装饰器模式,提供了灵活的方式来读取数据。下面是它们的工作原理:

FileInputStream

FileInputStream 是 Java 中用于读取文件数据的基本字节流。它是一个直接与操作系统文件系统交云的流,工作原理如下:

  • 文件描述符FileInputStream 在内部使用文件描述符(File Descriptor),这是操作系统中用于标识开放的文件资源的句柄。
  • 系统调用 :当你创建一个 FileInputStream 并调用 read() 方法时,它会进行系统调用,让操作系统从文件中读取下一批字节到内存中。
  • 缓冲区 :虽然 FileInputStream 本身不提供缓冲,但它会将读取的数据放入一个字节数组(即缓冲区)中,以便你可以从中检索数据。
  • 直接读取FileInputStream 操作的是原始字节,不涉及字符编码,因此适合处理所有类型的二进制文件。

InputStreamReader

InputStreamReader 是一个字符流,它将输入字节流转换为字符流。它的工作原理基于字符编码:

  • 编码转换InputStreamReader 接收一个 InputStream(如 FileInputStream)并使用指定的字符集将字节转换为字符。它在内部使用字符解码器,根据编码方案(如 UTF-8、ISO-8859-1)来解释字节序列。
  • 适配器InputStreamReader 充当适配器,它提供了 Reader 类的接口,并使用底层的字节流进行数据读取和编码转换。

BufferedReader

BufferedReader 是一个装饰器,用于提高字符读取性能和增加一些额外的读取方法,如按行读取。它的工作原理是:

  • 内部缓冲BufferedReader 包装一个其他的 Reader 对象(如 InputStreamReader),并在内部维护一个字符数组作为缓冲区。
  • 减少I/O操作 :当从 BufferedReader 读取数据时,它首先尝试从内部缓冲区获取,只有在缓冲区为空时,才通过封装的 Reader 从文件系统读取更多数据填充缓冲区。这减少了系统调用的次数,因为每次调用可以读取多个数据,而不是每次一个。
  • 高效读取BufferedReader 提供了 readLine() 方法,允许高效地按行读取文本,而不需要每次读取时都去检查行结束符。

整体上,这些类的组合为 Java I/O 提供了灵活性和效率。你可以使用 FileInputStream 来读取原始字节数据,通过 InputStreamReader 进行字符编码的转换,然后使用 BufferedReader 来高效地缓冲和按行读取文本数据。

相关推荐
IKUN家族2 小时前
Spring MVC(一)
java·spring·mvc
老马识途2.03 小时前
关于跨域问题的总结
java·前端
都叫我大帅哥4 小时前
Java日期时间三十年战争:从Date考古到LocalDateTime革命,以及数据库与前端的那点事儿
java
Muscleheng4 小时前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
2501_936415695 小时前
可变参数&综合练习&斗地主游戏
java·windows·游戏
极客先躯6 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
xqqxqxxq6 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
wang09077 小时前
自己动手写一个spring之aop_1
java·后端·spring
国科安芯7 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
deng12047 小时前
【Thread类的用法(1)-- Thread类的基本用法】
java·java-ee