Java面试题:Java的IO流有哪几种(IO流知识点剖析和演示面试)

面试官提了这样一个问题:

Java的IO流有哪几种?

知识点剖析

IO流,即输入输出流,是比较明确的知识点,也没有啥难理解的。我先简单说一点,然后再做演示面试。

1 输入输出流是干什么的?

输入输出流是做数据读写的,比如读写文件、读键盘信号、读鼠标信号、输出信息到显示器、网络上传下载、浏览网页、微信聊天发信息、抖音播放小视频,这些都要用到输入输出流。

2 输入到哪里?从哪里输出?

我们用读写文件来举例子,文件在硬盘上,对于文件的输入输出流形象的理解就有两个动作:读出文件内容、写入文件内容。如果对输入输出流理解不深的话,就会错误的认为读出文件用输出流,写入文件用输入流,这是错误的,正确的定义是读出文件用的是输入流,即in,写入文件用的是输出流,即out。

这要从输入输出流的架构来理解:输入输出针对的并不是文件或者网络,而是针对内存,无论任何形式的输入输出流,都是相对于内存而言的,可以看看下图的架构,这个架构就描述了输入输出流都是以内存来定义“进”和“出”的方向的。

这一点一定要记住,这是使用输入输出流的时候比较重要的概念。

3 输入输出的是什么

通俗一点说,输入输出的是数据,这个好像说的对,又好像是废话。

再深入一点分析,计算机里面的数据都是啥?想了想,计算机里面所有的东西都保存为0和1,那么应该传输的是 0和1。

但是这么说又不太精确,在计算机语言中并不直接操作0和1,最小的可操作单位是一个字节,即8位的0和1。

那么我们可以得出结论,输入输出的是一个个的字节。

举例子:读取文件,从文件中读到内容,无论是图片、还是文字、或者是电影MP4,歌曲MP3,我们如果考虑文件格式的话,那就太复杂了,成百上千的文件格式,实在没法统一格式管理。但如果我们深入底层去考虑,无论啥格式的,在计算机底层都是一个个的byte组成的字节数组。这样就简单了,我们把文件的二进制内容看做是一个大的字节数组就可以了,那么读取文件的过程就变成了读取一个字节数组到内存的过程了。

这个读取字节数组的过程很好理解,为啥又叫流了呢?弄得人很难理解。这是因为文件很可能比较大,我们没法一次把文件解析为一个单独的字节数组读到内存里,只能一次读一小部分写入内存,然后再读到下一小部分写入内存中,这样一小点一小点儿的读取,就好像一个水管中的水流,一个大池子的水,一点点儿的流入到另一个池子中。因此我们将输入输出命名为输入输出流。

3 Java中字节流和字符流的概念

上面说的是把文件解析为字节数组做传输,这是所有语言中的输入输出流都支持的方式,毕竟计算机中所有的数据和文件最小单位都被保存为字节,所以用字节流可以支持所有的输入输出需要。

不过Java为了方便读写字符内容,比如我们在聊天的时候,传输聊天内容很多时候都是字符串,这时候如果用字节流做传输就得有一个字节转字符 — 字符转字节的过程,因为字节是8位的,字符是 16位的,再加上不同的字符编码规范的设计,会让这个转换过程更加复杂。为了方便的处理字符串内容的传输,Java就提供了字符流来支持。

演示面试

基本概念说完了,我就开始做演示面试:

你好,面试官。

Java中的输入输出流主要有两种:字节流和字符流。

字节流主要是传输字节内容的,字符流主要是传输字符内容的。

字节流的最小传输单位是字节,每个字节是8位的。

字符流的最小传输单位是字符,每个字符是16位的。

字符流和字节流在类名上最大的区别是,字节输入输出流的类名普遍都以Stream结尾,输入字符流的类名普遍都以Reader结尾,输出字符流的类名普遍都以Writer结尾。

=========================================================

以上就是我的演示面试,不知道是否让你满意。

自我点评

因为输入输出流的概念实在是比较明确的,没有啥可扩展的知识点,所以我演示答题的时候就回答的比较干净利索脆。

在实际答题的时候,如果看面试官意犹未尽,我建议可以把输入输出流的模型描述一下。

给TA打赏
共{{data.count}}人
人已打赏
Java

Java面试题:BIO、AIO、NIO的区别(BIO、AIO、NIO知识点剖析和演示面试)

2023-2-21 10:45:09

Java

Java面试题:接口和抽象类有什么区别(接口和抽象类知识点剖析和演示面试)

2023-2-21 13:18:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
打开微信,扫描左侧二维码,关注【旅游人lvyouren】,发送【101】获取验证码,输入获取到的验证码即可解锁复制功能,解锁之后可复制网站任意一篇文章,验证码每月更新一次。
提交