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

沈阳建站程序/免费推广网站排名

沈阳建站程序,免费推广网站排名,网站开发是哪个,网站开发项目商业计划书文章目录 1.什么是Java IO?2.如何从数据传输方式理解IO流?3.Java IO设计上使用了什么设计模式?4.什么是Java NIO?5.什么时BIO?6.什么是AIO?7.你怎么理解同步IO和异步IO?8.你怎么理解阻塞IO和非阻塞IO?9.IO中的输入流和输出流有…

文章目录

    • 1.什么是Java IO?
    • 2.如何从数据传输方式理解IO流?
    • 3.Java IO设计上使用了什么设计模式?
    • 4.什么是Java NIO?
    • 5.什么时BIO?
    • 6.什么是AIO?
    • 7.你怎么理解同步IO和异步IO?
    • 8.你怎么理解阻塞IO和非阻塞IO?
    • 9.IO中的输入流和输出流有什么区别?
    • 10.字节流和字符流的区别?
    • 11.Java 流量有多少种类型?
    • 12.如何将字节流转化为字符流?
    • 13.如何将一个 java 将对象序列化到文件中?
    • 14.什么是 java序列化?
    • 15.如何实现 java 序列化?
    • 16.Filter流是什么?
    • 17.Filter流有哪些可用?
    • 18.解释java.io.Serializable接口?
    • 19.如何实现对象克隆?
    • 20.Java中的输入流和输出流有什么区别?
    • 21.Java中有几种类型的流?
    • 22.如何从数据操作上理解IO流?
    • 23.BIO、NIO、AIO三者区别以及适用场景?

在这里插入图片描述
在这里插入图片描述

1.什么是Java IO?

Java IO(Input/Output)是用于处理输入和输出操作的API,它允许程序与外部世界进行数据交互。

2.如何从数据传输方式理解IO流?

可以从三个不同的维度进行分类:

• 1、按照流的方向(输出输入都是站在程序所在内存的角度划分的)
• 输入流:只能从中读取数据【主要由InputStream和Reader作为基类】

• 输出流:只能向其写入数据【主要由outputStream和Writer作为基类】

• 2、按照流的操作颗粒度划分

• 字节流:以字节为单元,可操作任何数据【主要由InputStream和outPutStream作为基类】

• 字符流:以字符为单元,只能操作纯字符数据,比较方便【主要由Reader和Writer作为基类】

• 3、按照流的角色划分

• 节点流:可以从/向一个特定的IO设备(如磁盘,网络)读/写数据的流,也叫【低级流,主要由】

• 处理流:用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据的读/写功能,也叫【高级流】

3.Java IO设计上使用了什么设计模式?

  • 单一职责原则(Single Responsibility Principle): 这是一个重要的面向对象设计原则,它要求一个类应该只有一个责任。在Java IO中,不同的类负责不同的I/O操作,如InputStream负责读取字节,OutputStream负责写入字节,这符合单一职责原则。
  • 装饰器模式(Decorator Pattern): Java IO中的缓冲流(如BufferedReader和BufferedWriter)以及过滤流(如GZIPInputStream和GZIPOutputStream)采用了装饰器模式。这些类通过组合来增强I/O流的功能,而不是通过继承来扩展。
BufferedReader br = new BufferedReader(new FileReader("file.txt"));

这里,BufferedReader装饰了FileReader,以提供缓冲读取的功能。

  • 策略模式(Strategy Pattern): Java IO库中的Charset和CharsetEncoder/CharsetDecoder类采用了策略模式。它们允许你根据不同的字符编码策略来进行字符编码和解码。
Charset utf8 = Charset.forName("UTF-8");
CharsetEncoder encoder = utf8.newEncoder();

这里,Charset对象充当策略对象,CharsetEncoder则根据不同的策略来执行编码操作。

  • 观察者模式(Observer Pattern): Java IO库中的File和DirectoryStream等类可用于监视文件系统中的文件和目录。这些类允许你注册观察者来监听文件系统事件,符合观察者模式。
Path directory = Paths.get("my_directory");
WatchService watchService = FileSystems.getDefault().newWatchService();
directory.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);

这里,WatchService充当观察者,监视文件系统中文件的创建事件。

4.什么是Java NIO?

Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

5.什么时BIO?

Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

6.什么是AIO?

Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

7.你怎么理解同步IO和异步IO?

  • 同步I/O(Synchronous I/O):
    阻塞模式: 在同步I/O中,当一个I/O操作被发起时,调用线程将被阻塞,直到操作完成或出错为止。这意味着线程会一直等待,无法执行其他任务。
    顺序执行: 同步I/O操作通常是按照它们的发起顺序依次执行的。每个操作必须等待前一个操作完成才能继续执行。
    资源占用: 同步I/O需要分配一个线程来处理每个I/O操作,如果有大量并发连接,将消耗大量线程资源。

  • 异步I/O(Asynchronous I/O):
    非阻塞模式: 在异步I/O中,当一个I/O操作被发起后,调用线程不会被阻塞,可以继续执行其他任务,不必等待操作完成。
    并发性: 异步I/O允许同时发起多个I/O操作,并在后台进行处理,因此具有更高的并发性。
    回调机制: 异步I/O通常使用回调函数来处理I/O操作完成的通知。当I/O操作完成时,系统会调用预先注册的回调函数,而不是等待线程。
    复杂性: 异步I/O编程相对更复杂,因为它需要处理回调函数、状态管理等复杂性问题。

8.你怎么理解阻塞IO和非阻塞IO?

阻塞IO:当一个线程执行I/O操作时,它将一直阻塞该线程被一直占用,直到操作完成。
非阻塞IO:调用线程不会被阻塞,可以继续执行其他任务,不必等待操作完成。允许一个线程管理多个通道(连接)。

9.IO中的输入流和输出流有什么区别?

10.字节流和字符流的区别?

答:读字节流时,读一个字节后返回一个字节;字节流使用字节流读取一个或多个字节(中文对应的字节数为两个,在 UTF-8 码表中是 3 字节)时间。首先检查指定的编码表,并返回找到的字符。字节流可以处理图片、MP3、AVI视频文件等各种类型的数据,而字符流只能处理字符数据。除了字节流,只要是处理纯文本数据,就要优先使用字符流。字节流主要是操作 byte 类型数据,以 byte 以数组为准,主要操作类别为 OutputStream、Inputstream字符流处理的单元是 2 个字节的 Unicode 字符分别操作字符、字符数组或字符串,字节流处理单元为 1 操作字节和字节数组的字节。因此,字符流是由 Java 将字节转换为虚拟机 2 个字节的 Unicode 字符是单位字符制成的,所以对多国语言有很好的支持!如果是音频文件、图片和歌曲,最好使用字节流。如果与中文(文本)有关,最好使用字符流。在程序中,一个字符等于两个字节,java 提供了 Reader、Writer 两个专门操作字符流的类别。

11.Java 流量有多少种类型?

答:
(1)按流量方向:输入流(inputStream)和输出流(outputStream);
(2)按实现功能划分:节点流(可以从或到特定的地方(节点)读写数据。如 FileReader)和处理流(是对现有流的连接和封装,通过封装流的功能调用实现数据读写。如 BufferedReader。处理流的结构方法总是以其他流对象为参数。一个流对象通过其他流多次包装,称为流链接);
(3)按处理数据的单位: 字节流和字符流。继承字节流 InputStream 和 OutputStrea,InputStreamreader继承字符流 和 OutputStreamWriter 。

12.如何将字节流转化为字符流?

答:字节输入流通字符输入流通 InputStreamReader 这种结构函数可以实现并传输 InputStream 对象。
字节输出流字符输出流通过 OutputStreamWriter 这种结构函数可以实现并传输 OutputStream 对象。

13.如何将一个 java 将对象序列化到文件中?

答:在 java 能够序列化的类必须先实现 Serializable 接口,没有抽象的方法,只是起到了标记作用。

  public class Test {public static void main(String[] args) throws Exception {// 对象输出流ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("D://obj")));objectOutputStream.writeObject(new User("zhangsan", 100));objectOutputStream.close();// 对象输入流ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(new File("D://obj")));User user = (User) objectInputStream.readObject();System.out.println(user);objectInputStream.close();}}

14.什么是 java序列化?

答:序列化是一种处理对象流的机制。所谓对象流,就是流化对象的内容。流化后的对象可以读写,也可以在网络之间传输。序列化是为了解决对象流读写操作中引起的问题。

15.如何实现 java 序列化?

答:实现序列化将需要实现序列化类Serializable 界面,界面没有实现的方法,implements Serializable 只是为了标记对象可以序列化,然后使用输出流(如:File Output Stream)来构造一个 Object Output Stream(对象流)对象,然后,使用 Object Output Stream 对象的 write Object(Object obj)该方法可以将参数为 obj 对象写出(即保存其状态),如果要恢复,则使用输入流。

16.Filter流是什么?

答:Filter Stream是IO流的主要功能,用于为存在的流量增加一些额外的功能,如向目标文件添加源文件中不存在的行数或复制性能。

17.Filter流有哪些可用?

答:在http://java.主要由四个可用的filter包组成 Stream。两个字节filter stream,两个字符filter stream. 分别是Filter Input Stream, Filter Output Stream, Filter Reader and Filter Writer.这些类别是抽象的,不能实例化。

18.解释java.io.Serializable接口?

答:通过实现类 java.io.Serializable 该接口可以启用其序列化功能。未实现此接口的类别将无法使其任何状态序列化或反序列化。

19.如何实现对象克隆?

答:有两种方式(1)实现 Cloneable 接口并重写 Object 类中的 clone()方法(2)实现 Serializable 接口可以通过对象的序列化和反序列化来实现真正的深度克隆。

20.Java中的输入流和输出流有什么区别?

输入流用于从数据源(如文件或网络)读取数据,输出流用于向目标(如文件或网络)写入数据。

21.Java中有几种类型的流?

分为字符流和字节流。

22.如何从数据操作上理解IO流?

在这里插入图片描述

23.BIO、NIO、AIO三者区别以及适用场景?

  • BIO(Blocking I/O):
    阻塞模型: BIO是基于阻塞模型的I/O操作,意味着当一个线程执行I/O操作时,它将一直阻塞,直到操作完成。
    同步性: 在BIO中,所有I/O操作都是同步的,一个线程对一个连接进行读或写,直到完成。
    适用性: 适用于连接数量较少且每个连接的数据交互频繁的情况,但在高并发环境下性能不佳。

  • NIO(Non-blocking I/O):
    非阻塞模型: NIO采用了非阻塞模型,允许一个线程管理多个通道(连接)。
    选择器(Selector): NIO引入了选择器(Selector)的概念,通过选择器一个线程可以监听多个通道上的事件,如读就绪、写就绪等。
    缓冲区(Buffer): NIO使用缓冲区来存储数据,可以提高I/O效率。
    适用性: 适用于需要处理大量连接且连接数较多,但每个连接的数据交互相对较少的情况,如Web服务器。

  • AIO(Asynchronous I/O):
    异步模型: AIO采用异步模型,允许一个线程在进行I/O操作时不被阻塞,当操作完成后会通知应用程序。
    回调机制: AIO使用回调机制来处理I/O操作完成的通知。
    适用性: 适用于需要处理大量连接且每个连接的数据交互较少,且希望充分利用CPU的多核性能的情况。

  • 总结各种I/O模型的适用场景:
    BIO适用于连接数较少,且每个连接的数据交互频繁的情况,但不适用于高并发环境。
    NIO适用于需要处理大量连接,但每个连接的数据交互相对较少的情况,具有更好的性能和资源利用率。
    AIO适用于需要处理大量连接,且每个连接的数据交互较少,同时希望充分利用CPU多核性能的情况。
    选择适当的I/O模型取决于应用程序的特性和需求,不同的模型提供了不同的性能和可伸缩性。

相关文章:

【面试高高手】——JavaIO篇(23题)

文章目录 1.什么是Java IO?2.如何从数据传输方式理解IO流?3.Java IO设计上使用了什么设计模式?4.什么是Java NIO?5.什么时BIO?6.什么是AIO?7.你怎么理解同步IO和异步IO?8.你怎么理解阻塞IO和非阻塞IO?9.IO中的输入流和输出流有…...

图像采集 deep OCR

按照芯片类型可以分为CCD相机、CMOS相机 按照传感器的结构特性可以分为线阵相机、面阵相机 按照扫描方式可以分为隔行扫描相机、逐行扫描相机 按照分辨率大小可以分为普通分辨率相机、高分辨率相机按照输出信号方式可以分为模拟相机、数字相机 按照输出色彩可以分为单色(黑白)相…...

Linux 终端命令总结

一、常用的七条命令 命令 对应英文作用lslist查看当前文件夹下的内容pwdprint work directory查看当前所在文件夹cd [目录名]change directory切换文件夹 touch [文件名]touch如果文件不存在新建文件mkdir [目录名]make directory创建目录rm[文件名]remo…...

中国核动力研究设计院使用 DolphinDB 替换 MySQL 实时监控仪表

随着仪表测点的大幅增多和采样频率的增加,中国核动力研究设计院仪控团队原本基于 MySQL 搭建的旧系统已经无法满足大量数据并发写入、实时查询和聚合计算的需求。他们在研究 DB-Engines 时序数据库榜单时了解到国内排名第一的 DolphinDB。经过测试,发现其…...

速看!软考中项100条重要知识点集锦!

1. 项目的特点有哪些? 2. 项目的组织方式有哪些?分别具有什么优缺点? 3. 项目管理过程组有哪些? 4. 怎么样才能成为一位优秀的项目经理? 5. PMO的主要职能有哪些? 6. 项目经理(PM&#xff…...

Pycharm在进行debug时出现collecting data如何解决?

Pycharm在进行debug时变量界面出现collecting data,问题如下: 解决方法:打开Setting界面,在Python Debugger选项中勾选下图中的Gevent compatible即可。...

【算法分析与设计】算法概述

目录 一、学习要点二、算法的定义三、算法的性质四、程序(Program)五、问题求解(Problem Solving)六、算法的描述七、算法分析的目的八、算法复杂性分析(一)算法时间复杂性分析(二)算法渐近复杂性1、渐进上界记号-大O符号2、渐进下…...

如何进一步全面提高项目估算精准度?

项目估算非常重要,这直接关系着项目的成本和收入,如果估算不准确,将为项目带来较大风险。一般软件规模可以用多种方式进行估算,但是用功能点估算方式更准确,而自动估算让估算更快速,我们以CoCode开发的估算…...

Git学习笔记4

GitHub是目前最火的开源项目代码托管平台。它是基于web的Git仓库,提供公有仓库和私有仓库,但私有仓库是需要付费的。 到Github上找类似的项目软件。 GitLab可以创建免费的私有仓库。 GitLab是利用 Ruby开发的一个开源的版本管理系统,实现一个…...

【红外与可见光图像融合】离散平稳小波变换域中基于离散余弦变换和局部空间频率的红外与视觉图像融合方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

成都睿趣科技:抖音开通橱窗带货需要钱吗

随着社交媒体和电子商务的蓬勃发展,抖音作为一种流行的短视频平台,也推出了自己的“抖音橱窗”功能,让内容创作者能够通过视频展示和销售产品,从而实现商业化。那么,抖音橱窗带货是否需要费用呢? 首先,要开…...

中间件 - 分布式协调服务Zookeeper

目录 一. 前言 二. 树状结构 2.1. ZNode 2.1.1. stat 2.1.2. ACL 三. NameService命名服务 四. Configuration 配置管理 五. GroupMembers 集群管理 六. 集群三个角色及状态 七. 选举算法 八. Watcher 九. 设计目的 十. 典型使用场景 一. 前言 Zookeeper是一个分布…...

golang的实用工具

golang的实用工具 Go 语言提供了许多实用的工具,以下是其中一些常用的工具: 1. go run:用于直接运行 Go 源代码文件,无需显式编译。 2. go build:用于将 Go 代码编译成可执行文件或库。 3. go test:用于…...

图层混合模式(三)

差值模式 差值模式:查看每个通道的数值,用基色减去混合色或用混合色减去基色。具体取决于混合色与基色那个通道的数值更大。白色与任何颜色混合得到反相色,黑色与任何颜色混合颜色不变。 计算公式:结果色 绝对值(混合…...

蓝牙核心规范(V5.4)10.6-BLE 入门笔记之L2CAP

蓝牙篇之蓝牙核心规范(V5.4)深入详解汇总 1.概述 L2CAP负责协议复用、流量控制、服务数据单元(SDU)的分段和重组。它使用通道的概念来分隔在堆栈层之间传递的数据包序列。固定通道不需要设置,立即可用,并与特定的上层协议相关联。通道也可以通过指定的协议服务多路复用器…...

【计算机网络】DNS原理介绍

文章目录 DNS提供的服务DNS的工作机理DNS查询过程DNS缓存 DNS记录和报文DNS记录DNS报文针对DNS服务的攻击 DNS提供的服务 DNS,即域名系统(Domain Name System) 提供的服务 一种实现从主机名到IP地址转换的目录服务,为Internet上的用户应用程序以及其他…...

Docker的基础命令

目录 一、镜像操作 1、搜索镜像 2、下载镜像 3、查看镜像 3.1 查看下载到本地的所有镜像 3.2 查看单个镜像的详细信息 4、为镜像添加新的标签 5、镜像导出和导入到本地 5.1 镜像导出到本地 5.2 导入镜像 6、删除镜像 7、批量删除镜像 8、上传镜像 8.1 官网注册登录…...

提取项目依赖包的licenses

skywalking-eyes工具可以快速提取出licenses...

Vue项目自动转换px为rem-高保真还原设计图

前端开发中还原设计图的重要性毋庸置疑,目前来说应用最多的应该也还是使用rem。然而很多人依然还是处于刀耕火种的时代,要么自己去计算rem值,要么依靠编辑器安装插件转换。 而本文的目标就是通过一系列的配置后,在开发中可以直接使…...

rman备份到远程服务器

rman备份到远程服务器磁盘 原因 业务数据量较大,数据库服务器上无足够地空间存放rman备份,磁盘扩容申请不批。无奈采取nfs远程备份 环境信息 ip操作系统备份目录远程备份服务器192.168.3.130Centos7.9rmanbak数据库服务器192.168.3.132:1521Centos7.…...

数据结构与算法

目录 数据结构与算法 为什么要学习数据结构和算法? 常见的数据结构 常用算法 插入排序 一、概念及其介绍 二、适用说明 三、过程图示 希尔排序 一、概念及其介绍 二、适用说明 三、过程图示 归并排序 一、概念及其介绍 二、适用说明 三、过程图示 …...

【Web3】DAO相关的基础知识

这里写目录标题 DAO 的基础概念为什么需要 DAO?DAO 的种类 DAO 的运作方式知名 DAO 的介绍Bankless DAOSeeDAO DAO 的生态全景图分类治理框架DAO 的工具 DAO 众筹平台介绍 - JuiceBoxDAO 投票治理介绍 - SnapshotDAO 贡献 & 激励 - POAPDAO 信息管理 - NotionDA…...

一文教你学会ArcGIS Pro地图设计与制图系列全流程(3)

ArcGIS Pro做的成果图及系列文章目录: 系列文章全集: 《一文教你学会ArcGIS Pro地图设计与制图系列全流程(1)》《一文教你学会ArcGIS Pro地图设计与制图系列全流程(2)》《一文教你学会ArcGIS Pro地图设计与…...

用于大规模 MIMO 检测的近似消息传递 (AMP)(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

复杂SQL解析

文章目录 背景表SQL关键字分析具体Sql注意点补充:select的字段,也可以带有计算逻辑 背景表 1、sale_log as result: 主表,大部分字段都是取自这个表 2、sale_num as sale:需要从这个表获取真实销量sale_num字段 3、schedule as…...

js中哪些地方会用到window?

前言 Window 对象是JavaScript中的顶层对象,它代表了浏览器中打开的窗口或者标签页。浏览器中打开的每一个窗口/标签页都会有一个对应的 Window 对象。在浏览器中,全局作用域的 this 就是指向 Window 对象。 正文 在 JavaScript 中,window 对…...

KITTI raw_data数据集百度云下载

1. 百度云链接 链接:https://pan.baidu.com/s/1YNzfDoJomKOZhlVUr2eEOA?pwdtfh3 提取码:tfh3 –来自百度网盘超级会员V6的分享 2. 资料来源 https://www.cvlibs.net/datasets/kitti/raw_data.php 命令行执行./raw_data_downloader.sh #!/bin/bashfiles(2011_…...

(3) OpenCV图像处理kNN近邻算法

目录 一、介绍 1、类通过Matplotlib显示 2、Matplotlib显示效果 二、通过KNN近邻对新成员进行分类例程...

手撸RPC【gw-rpc】

文章目录 基于 Netty 的简易版 RPC需求分析简易RPC框架的整体实现协议模块 📖自定义协议 🆕序列化方式 🔢 服务工厂 🏭服务调用方 ❓前置知识——动态代理🕳️Proxy类InvocationHandler 接口 RPC服务代理类内嵌Netty客…...

【Linux】:Kafka组件介绍

目录 环境简介 一、消息 二、主题 三、分区 四、副本 五、生产者 六、消费者 七、消费者组 八、offsets【偏移量】 环境简介 Linux内核:Centos7 Kafka版本:3.5.1 执行命令的目录位置:Kafka安装目录的bin目录下:/usr/loca…...