面试官:谈谈你对IO流和NIO的理解
一、概念
二、NIO和IO的主要区别
下表总结了Java IO和NIO之间的主要区别:
1、面向流与面向缓冲
Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。
Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。
Java NIO面向缓冲区的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。
2、阻塞与非阻塞IO
3、选择器(Selectors)
Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。
三、NIO和IO如何影响应用程序的设计
无论您选择IO或NIO工具箱,可能会影响您应用程序设计的以下几个方面:
1.对NIO或IO类的API调用。 2.数据处理。 3.用来处理数据的线程数。
1、API调用
2、数据处理
该文本行的流可以这样处理:
四、IO与NIO的选择
另外IO流的几个面试题
1. Java IO 流中涉及到了哪些设计策略和设计模式
//把InputStreamReader装饰成BufferedReader来成为具备缓冲能力的Reader。BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
对于 IO 流涉及的适配器设计模式例子如下:
//把FileInputStream文件字节流适配成InputStreamReader字符流来操作文件字符串。
FileInputStream fileInput = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInput);
2. 字节流与字符流有什么区别:
3. 字节流和字符流哪个好,如何选择?
作者:Java_老男孩地址:https://www.jianshu.com/p/5222c40e3797
正文结束
2
3
4
5
6
7
8
一个人学习、工作很迷茫?
面试官:谈谈你对IO流和NIO的理解相关推荐
- 面试官:谈谈分库分表吧?
面试官:"有并发的经验没?" 应聘者:"有一点." 面试官:"那你们为了处理并发,做了哪些优化?" 应聘者:"前后端分离 ...
- 联合索引会创建几个索引_面试官:谈谈你对mysql联合索引的认识?
引言 这篇文章作为<面试官:谈谈你对mysql索引的认识>的续篇,我当时在写这篇的时候,考虑到篇幅问题所以略去了联合索引的内容,今天给大家补上. 本文预计分为两个部分:(1)联合索引部分的 ...
- Java面试知识点:File、IO流
问题:Java面试知识点:File.IO流 答案: 1.File listFiles方法注意事项: • 当调用者不存在时,返回null • 当调用者是一个文件时,返回null • 当调用者是一个空文件 ...
- 【267期】面试官:Mybatis 如何实现流式读取 MySQL 大数据量记录?
点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 背景 最近 ...
- 面试官: 谈谈什么是守护线程以及作用 ?
来自:小哈学Java 目录 一.什么是守护线程 二.守护线程的作用及应用场景 三.总结 一.什么是守护线程 守护线程相对于正常线程来说,是比较特殊的一类线程,那么它特殊在哪里呢?别急,在了解它之前,我 ...
- 面试官提问:说说你对消息队列的理解
每天早上七点三十,准时推送干货 关于消息队列,断断续续的看了很多资料,一直想抽个时间把这些知识整理记录下来,但是没腾出时间来写,正好所在的项目在实际业务中使用到了消息队列,索性就将这方面的知识整理一下 ...
- access建立两个字段唯一索引_面试官:谈谈你对mysql索引的认识?
引言 这篇我们就来谈谈关于索引方面的mysql面试题.还是老规矩,讲的是在Innodb存储引擎下的情形,毕竟我还真没用过Mysiam之类的存储引擎. ps:其实很早就想写了,一直偷懒! 其实这下面每个 ...
- 面试官:说一下限流、熔断、高可用?好多人一脸懵!
来源:cnblogs.com/Courage129/p/14423707.html 日常生活中,有哪些需要限流的地方? 像我旁边有一个国家景区,平时可能根本没什么人前往,但是一到五一或者春节就人满为患 ...
- 面试官:聊一下你对MySQL索引的理解?
作者:浪人 来源:http://t.cn/AiKmcEef MySQL索引?这玩意儿还能简单聊?明显是在挖坑,幸好老夫早有准备,切听我一一道来. 一.索引是什么? 索引是帮助MySQL高效获取数据的数 ...
- python io流,Python io流会在列表理解中自动关闭吗?
For example I have the following code: d = [l for l in open('a.txt', 'r')] After d is created, will ...
最新文章
- CSS上下左右居中的几种方法
- 跳过 centos部署 webpy的各种坑
- 中兴bsc服务器是什么,中兴BSC内部信令流程介绍
- 人工智能必备数学知识· 学习笔记 ·002【马尓可夫链,马尓可夫链奖励过程,马尔可夫决策过程】
- Java http处理get请求,参数中带特殊字符处理方式
- 2020-11-02 联想 Yoga Duet IML 2020
- [Leetcode] 70. Climbing Stairs Java
- caffe(CPU版本)配置 及MNIST调用
- 【蓝桥杯国赛真题06】Scratch3D打印 少儿编程scratch蓝桥杯国赛真题和答案讲解
- 建表mysql语句吗_mysql建表语句问题
- python list 元素位置,怎么查找python列表中元素的位置
- OJ每日一练——鸡兔同笼问题
- 杜克大学中国女博士7年奋斗历程
- java制作闪星星_three.js制作星球和星星闪烁的简单示例
- 太上老君的炼丹炉之分布式 Quorum NWR
- 使用 Suspense 改善 Vue 3 中的用户体验
- Unity Android Unable to load resource的问题
- 小程序 获取当前日期
- 6款超实用微信小程序,任何手机都需要!
- vc项目开发:俄罗斯方块制作日志
热门文章
- 基于Netty自己动手实现Web框架
- 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.1.4 从默认值开始...
- 修改Chrome的User Agent的方法 真实有效
- 深山红叶PE工具箱嫦娥一号纪念版
- 「leetcode」47.全排列 II【回溯算法】详细图解!
- 如何在 Pr 2020中使用音轨混合器?
- 苹果Mac记事本中快速计算应用:Soulver
- 如何在 Mac 上使用剪贴板?
- 如何在 Mac 上的网站上使用 Touch ID 作为密码?
- iOS开发之阿里百川、京东联盟、多多客联盟(拼多多)的接入