【面试官】那Java字节流和字符流有什么区别?

  • 面试官:你说下对Java IO的理解?
  • 面试官:那要怎么读取字节流?
  • 面试官:你说的这些不是实例,我要的是能真正读取的?
  • 面试官:为什么加一层缓存流就能提高读取效率?
  • 面试官:读取之后呢,我怎么知道文件读取到末尾了?
  • 面试官:那字符流读取呢?
  • 面试官:输出流你也讲一讲?
  • 面试官:那字节流和字符流有什么区别?
  • 面试官:你刚刚提到转换流把字节输入流转换成字符输入流,可不可以倒过来?
  • 👉以贴近现实的【面试官面试】形式涵盖大部分Java程序员需要掌握的后端知识、面试问题
  • 📚本期是《Java IO系列》,其他系列博客请订阅专栏《Java Offer训练营》
  • ❤创作不易,不妨点赞、收藏、关注支持一下

文章目录

  1. IO的理解
  2. 输入流
    1. 字节输入流读取方法
    2. 字节输入流读取实例
    3. 缓存流提高读取效率
    4. 字节输入流末尾
    5. 字符输入流
  3. 输出流
  4. 字节流和字符流区别
  5. 转换流

1. IO的理解

面试官:你说下对Java IO的理解?

好的面试官,Java IO有两个参与对象,一个是IO源端,一个是想要和IO源端通信的各种接收端如控制台、文件等,我们程序要保证的就是顺利的读取和顺利的写入。

2. 输入流

2.1 字节输入流读取方法

面试官:那要怎么读取字节流?

读取字节的抽象基类是InputStream,这个基类提供了3个方法可以来读取字节流。

  1. 从输入流读取下一个数据字节,值字节以0到255范围内的int返回。

    public abstract int read() throws IOException
    
  2. 从输入流读取一定数量的字节并将它们存储到缓冲区数组b中。

    public int read(byte b[]) throws IOException
    
  3. 从输入流读取最多len个字节的数据到字节数组中。

    public int read(byte b[], int off, int len) throws IOException
    

2.2 字节输入流读取实例

面试官:你说的这些不是实例,我要的是能真正读取的?

那可以用抽象基类的子类实现来读取,例如文件流FileInputStream

new FileInputStream(SOURCE_PATH)

我们还可以在外面加一层缓存字节流来提高读取效率。

new BufferedInputStream(new FileInputStream(SOURCE_PATH))

如果要把缓存流换成字符流来承接,方便使用readLine()读取某一行的话,可以使用转换流把字节输入流转换成字符输入流。

new BufferedReader(new InputStreamReader(new FileInputStream(SOURCE_PATH)))

2.3 缓存流提高读取效率

面试官:为什么加一层缓存流就能提高读取效率?

是这样的。因为直接使用 FileInputStream 读取文件的话,每次调用 read() 都是从磁盘读取一个字节,而每次读取都是一次系统调用。系统,涉及到用户空间和内核空间之间的上下文切换,这些切换是很昂贵的。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java Offer训练营 文章被收录于专栏

👉以贴近现实的【面试官面试】形式帮助你系统学习后端技术 👉成体系知识帮你在后端进阶,每一道问答助你怒怼大厂面试官,收获大厂offer 👉《Java Offer训练营》包含Redis系列、MySQL系列、Kafka系列、ZooKeeper系列、JVM系列、多线程系列等等 👉制作不易,各位的支持是我创作的最大动力

全部评论
厉害厉害
1 回复
分享
发布于 04-16 21:03 广东
666
点赞 回复
分享
发布于 04-20 21:47 广东
联想
校招火热招聘中
官网直投
🐮
点赞 回复
分享
发布于 04-25 23:37 广东

相关推荐

#后端# #java# #美团# #测开#自我介绍项目中的亮点 说了精度丢失和超卖问题主动更新是什么意思?延迟删除会有什么问题吗用过redis的什么数据结构详细讲解下redis的底层synchronized和lock的区别可重入是什么意思?synchronized底层怎么实现的?lock锁底层呢?线程池的核心参数?执行流程如果创建的是无界队列会有什么影响从操作系统角度来说键入url到访问页面的流程?mysql怎么样尽可能的让多用到索引?三个字段a b c联合索引 查询语句里面是 a = x ,c > x和b =x 会触发那个字段的索引?mysql有哪几种存储引擎 讲下区别聚簇索引和非聚簇索引的区别?如何尽可能的减少回表查询?可以建立哪几种索引?like % 这个 %应该放到哪才能用到索引threadlocal底层了解吗你的项目哪里用到了他为什么要用exception和error的区别?你的项目遇到过什么异常 怎么解决的?什么时候trycatch什么时候抛异常?redis什么时候用list?redis的几种数据结构分别什么时候用?手撕力扣简单题(思路对的,没写出来)目前就回想起这些忘了录音了应该是寄了,第一次面大厂开发,有些紧张,面试官全程绷着脸,更紧张了,感觉问的不难但是答得确实不好,安心搞测开去咯。有没有大佬知道测开究竟怎么样啊?求告知,求私聊。
点赞 评论 收藏
转发
5 18 评论
分享
牛客网
牛客企业服务