当前位置: 首页 > news >正文

java八股!2

IO流

好短 就三个问题(io流,区别,NIO实现)

文章目录

    • IO流
    • io流基本认识
      • 字节流和字符流的区别(中文,底层设备,缓冲区,应用场景)
      • I/O模型(4种(可以看做3种))(以及使用场景的区别)
      • NIO的实现机制

io流基本认识

io流分为字节流和字符流两大类,提供一种灵活的输入和输出数据的方式。
字节流:
inputStream和outputStream,是所有字节输入输出流的抽象基类,提供输入和输出字节的方式。
fileinputStream和fileOutputStream是用于文件读取和写入的字节流类,
byteArrrayInputStream类是用于从字节数组中读取和写入的字节流类。

字符流:
reader和writer,是所有字符输入流和输出流的抽象基类,分别用于读取和写入字符
fileReader和fileWriter,文件
bufferedReader和bufferedWriter,提供缓冲区,提高读取和写入的效率

还有一种高级流,ObjectInputStream和ObjectOutputStream,用于读取和写入对象,可以序列化和反序列化对象

字节流和字符流的区别(中文,底层设备,缓冲区,应用场景)

一个字符=两个字节,中文是两个字节,因此使用字节流传输中文的时候可能会产生乱码。
底层设备可以接受的数据类型还是字节类型,有时候需要将字符串转换成字节流写入底层设备。
字节流在操作时本身不会用到缓冲区,是直接对文件进行操作,字符流操作时先写入缓冲区。
使用场景:字符流通常用于处理纯文本数据,字节流通常用于处理图像,视频,ppt,word类型数据,也可以用于处理纯文本。但字符流不可以用于处理图像类型数据。

I/O模型(4种(可以看做3种))(以及使用场景的区别)

BIO:阻塞,同步,线程等待IO完成再进行其他操作,等待过程中阻塞,在高并发时会影响性能
NIO,非阻塞,IO时可以进行其他操作,线程通过不断轮询的方式查看io操作是否完成,或使用回调函数等机制。在高并发时比BIO性能好,但轮询会影响CPU效率。
IO多路复用:一个线程管理多个连接。比如java中的selector类
AIO:异步IO,完成后进行回调

NIO的实现机制

组件有三个,channel,selector(选择器),buffer
channel是NIO中的一个抽象概念,类似于传统的流,但更加灵活,channel可以是读,写或读写的,比较常用的channel有fileChannel,SocketChannel和ServerSockeChannel

buffer:缓冲区,channel从buffer中读取数据,将数据写入到buffer中。buffer提供了对数据哈的结构性访问,可支持的数据类型覆盖了能通过io发送的基本数据类型。

selector选择器:允许一个线程同时监控多个channel,当某个channel法生读写事件时,可以通过selector获得通知。

NIO的整体工作流程:
首先打开channel,通过fileChannel,socketChannel或ServerSocketChannel的.open打开一个channel

创建一个或多个buffer用于读写数据的缓冲区

写:将数据写入buffer,然后buffer写入channel
读:channel写入数据到buffer,从buffer中读取到数据

将channel注册到selector,当channel上发生感兴趣的事件时,选择器会通知线程。

处理事件:在一个循环中调用selector的select方法,该方法会阻塞至少等到一个注册的channel上发生了事件,然后通过迭代selectedKeys获取selectionKey定位到具体的channel并处理事件。

http://www.lryc.cn/news/434594.html

相关文章:

  • 一分钟了解统一软件开发过程RUP的那点事
  • Goby 漏洞发布|(CVE-2024-45195)Apache OFBiz /viewdatafile 代码执行漏洞【已复现】
  • js的书写位置和css的书写位置的区别?为什么要这样写?
  • Python一些可能用的到的函数系列132 ORM-sqlalchemy连clickhouse
  • 华为 HCIP-Datacom H12-821 题库 (12)
  • pointpillar部署-TensorRT实现(三)
  • Java学习中,为什么会混淆类方法和实例方法,应该怎么办?
  • 【人工智能学习笔记】4_3 深度学习基础之循环神经网络
  • 解锁生活密码,AI答案之书解决复杂难题
  • Android Radio2.0——公告监听设置(四)
  • EMR Spark-SQL性能极致优化揭秘 Native Codegen Framework
  • 【VUE】实现当前页面刷新,刷新当前页面的两个方法(如何在一个页面写一个方法提供给全局其他地方调用)(如何重复调用同一个路由实现页面的重新加载)
  • 【科研小小白】灰度化处理、阈值、反色、二值化、边缘检测;平滑;梯度计算;双阈值检测;非极大值抑制
  • 数字经济时代,零售企业如何实现以消费者为中心的数字化转型?
  • 微积分复习笔记 Calculus Volume 1 - 1.5 Exponential and Logarithmic Functions
  • 代码随想录 刷题记录-24 图论 (1)理论基础 、深搜与广搜
  • MyBatis 缓存机制详解:原理、应用与优化策略
  • 跨越技术壁垒:EasyCVR为何选择支持FMP4格式,重塑视频汇聚平台标准
  • 美团OC感想
  • 搜维尔科技:AcuMap - 针灸模拟VR训练解决方案
  • WEB渗透权限维持篇-禁用Windows事件日志
  • 【设计模式】Template Method伪代码
  • 关于2023.9.2~2023.9.10学习总结与教训
  • NLTK:Python自然语言处理工具包及其参数使用详解
  • php 之 php-fpm 和 nginx结合使用
  • 数学建模笔记——TOPSIS[优劣解距离]法
  • 证书学习(四)X.509数字证书整理
  • 氚云,低代码领风者如何破解行业的“中式焦虑”?
  • “深入解析:MySQL半同步复制的配置指南与实践技巧“
  • 第四届长城杯部分wp