每日一道面试题之java 中 IO 流分为几种?

简介: 每日一道面试题之java 中 IO 流分为几种?

IO流是什么?

流是数据在数据源(文件)和程序(内存)之间经历的路径。

这样解释似乎是很抽象不易理解的,因此我们拿生活中的例子来说,我们可以把流看成流动的自来水,打开水阀,自来水就会通过水管从水源流到各个用户家中,同样的道理,水库中的水也会通过水管流入到水源。从水源流出到用户家为自来水的输出流,而从水库流入到水源为自来水的输入流,只有构成这样一个循环,自来水才能源源不断的被人们利用。


从java的角度分析,由于Java对数据的操作是通过流的方式,而IO流能够处理设备之间的数据传输,例如:文件的上传和下载,Java用于操作流的对象都在IO包中。

IO流的分类:

关于java中IO流的分类,我们可根据或者单位进行划分。

按流划分:

首先我们先来谈谈以流划分,以流划分可以分为两类,分别为输入流[数据的读取]和输出流[数据的写入]

从Java的角度分析,引入IO流的作用为:如果要实现从文件中读取数据,需要在程序和文件之间建立一条数据输入的通道,这样java程序才能从文件中读取数据;反之,如果要实现在Java程序中把数据写入文件,也需要在程序和文件之间建立一条数据输出的通道,这样才能通过java程序将数据写入文件中。


但这两条通道并不需要人为的去创建,而是我们在java程序中,一旦创建输入流对象,那么Java会自动建立数据输入通道,同理创建输出流时,Java也会自动建立数据输出通道,如下图所示的解释更为直观:

简单点来说:输入流是数据从数据源(文件)到程序(内存)的路径,是一个读取数据的过程,输出流是数据从程序(内存)到数据源(文件)的路径,是一个创建数据的过程。

按单位划分:

根据单位进行划分,可以分为字节流和字符流。


java中的字节流有InputStream、OutputStream,字节流处理的单元为1个字节(byte),操作的对象为字节和字节数组,文件存储的形式为二进制,对于音频文件、图片、歌曲,我们推荐使用字节流


java中的字符流有Reader、Writer;它处理的单元为2个字节的Unicode字符,操作的对象为字符、字符数组或字符串,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,对于文本文件,我们推荐使用字符流


那么它们之间有什么关系呢?


我们知道计算机中的所有文件储存都是以字节的形式进行的,在磁盘上保留的并不是文件的字符,而是先把字符编码成字节,再储存这些字节到磁盘。当读取文件(特别是文本文件)时,也是一个字节地读取便于形成字节序列。


字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。


字节流是最基本的,主要用在处理二进制数据,它是按字节来处理的,但在实际应用中,很多的数据都是文本类型,因此又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化,这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联,我们在实际开发中经常遇到的汉字乱码问题,实际上就是由于字符流和字节流之间转化不统一而造成的

相关文章
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
4月前
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
130 0
|
5月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
277 0
|
16天前
|
设计模式 缓存 安全
提供一些准备Java八股文面试的建议
准备Java八股文面试需系统梳理核心知识点,涵盖Java基础、集合、多线程、JVM、设计模式及主流框架。重在理解原理而非死记硬背,结合源码与实际场景深化认知。通过思维导图构建知识体系,分模块刷题并模拟面试表达,关联项目经验,体现应用能力。关注Java新特性与技术演进,避免知识过时。最终实现从“背答案”到“懂原理、能实战”的转变,提升综合竞争力。(238字)
131 7
|
4月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
377 0
|
24天前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
118 1
|
3月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
4月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
184 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
2月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
3月前
|
SQL Java 数据库连接
Java IO流(一):字节流与字符流基础
本文全面解析Java IO流,涵盖字节流、字符流及其使用场景,帮助开发者理解IO流分类与用途,掌握文件读写、编码转换、异常处理等核心技术,通过实战案例提升IO编程能力。
下一篇
开通oss服务