高级java每日一道面试题-2024年7月12日-基础篇-你对IO流了解多少?

如果有遗漏,评论区告诉我进行补充

面试官问: 你对IO流了解多少

我回答:

一. 什么是 Java IO 流?

回答
Java IO 流是用于处理输入和输出操作的一组类和接口。它允许程序从不同的数据源(如文件、网络连接、内存缓冲区等)读取数据或将数据写入到不同的目标位置。IO 流分为字节流和字符流两大类,字节流以字节为单位进行数据传输,而字符流以字符为单位进行数据传输。
- 字节流:处理的是字节数据,每次读写8位。包括InputStreamOutputStream及其子类。
- 字符流:处理的是字符数据,每次读写16位。包括ReaderWriter及其子类。

二. Java IO流的分类

回答

  1. 按照流的方向
    • 输入流(InputStream/Reader)
    • 输出流(OutputStream/Writer)
  2. 按照实现功能
    • 节点流(直接从或向一个特定节点读写数据,如FileReader)
    • 处理流(对一个已存在的流进行连接和封装,如BufferedReader)
  3. 按照处理数据的单位
    • 字节流(继承自InputStream/OutputStream,如FileInputStream/FileOutputStream)
    • 字符流(继承自Reader/Writer,如FileReader/FileWriter)

三. 字节流和字符流的区别是什么?

回答

特性字节流字符流
继承类InputStream/OutputStreamReader/Writer
传输单位字节(8位)字符(Java中通常为16位,Unicode字符)
缓冲区不直接通过缓冲区(但可结合BufferedInputStream/BufferedOutputStream使用)字符流操作通常在缓冲区中进行
适用场景适用于二进制数据(如图片、视频、音频等)的读写适用于文本数据的读写
编码字节流则需要开发者自己处理编码可以自动处理字符编码的转换

四. 简述 Java 中常用的字节流和字符流类。

回答
- 字节流
- FileInputStream / FileOutputStream:用于从文件读取/写入字节数据。
- ByteArrayInputStream / ByteArrayOutputStream:用于在内存中的字节数组上进行输入/输出操作。
- BufferedInputStream / BufferedOutputStream:提供了缓冲功能,以提高读写效率。
- 字符流
- FileReader / FileWriter:用于从文件读取/写入字符数据。
- StringReader / StringWriter:用于在字符串上进行输入/输出操作。
- BufferedReader / BufferedWriter:提供了缓冲功能,以提高读写效率。

五. 什么是缓冲流?它的作用是什么?**

回答

  • 缓冲流(如 BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter)是一种带有缓冲区的流。当使用缓冲流进行读写操作时,数据会先被写入到缓冲区中,当缓冲区满后,数据会一次性被写入到实际的目标位置(如文件)或从实际的数据源(如文件)中读取到缓冲区中。这样可以减少实际的 I/O 操作次数,提高读写效率。
  • 原因:磁盘的读写操作是非常耗时的,尤其是对于频繁的小数据量读写。缓冲流通过在内存中创建一个缓冲区,将多次小的数据读写合并成一次较大的读写操作,从而减少对磁盘的访问次数,提高效率。

六. 解释下Java中的FileInputStream和FileOutputStream。

FileInputStreamFileOutputStream是Java中用于读写文件的两个基本类,它们都属于字节流。

  • FileInputStream:用于从文件中读取字节数据。它是InputStream的子类,主要用于读取二进制文件,如图片、音频等。
  • FileOutputStream:用于向文件写入字节数据。它是OutputStream的子类,可以用来创建新文件或向已有文件追加数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java我跟你拼了

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值