11、当我们用Java等高级语言开发应用程序时,就涉及到文件的读写 。在读写 *** 数据流时,一般需要先创建这样一个流模型 。就是在内存中打开一个缓存室空,将磁盘文件或者 *** 数据流写入缓存室空 。
12、如果需要进一步的处理,可以打开更多的缓存室空,在空之间传输的过程中可以对数据进行各种方式的处理,比如按照一定的规则对数据进行长度和标记 。高级语言类型和数据流模型从我们电脑的硬件结构来说,CPU、寄存器、主存、I/O控制器缓存、硬盘、键盘、网卡等 。通过各种数据总线在它们之间进行数据输入和输出活动 。
13、这些数据进出每个硬件的通信构成了我们的应用程序的逻辑计算实现 。为了描述它们之间的数据流,高级语言抽象出IO模型,从最初的阻塞I/O模型,如JavaIO,到后来的非阻塞IO模型,如JavaNIO/NIO.2和aIO等 。这些数据模型最基本的是,Stream流分为输入数据流和输出数据流,它们的原生数据流是二进制比特流 。
14、为了符合我们人类世界的内容表示,我们对它的长度和固定位数做了一些结构化的抽象,也就是我们常用的各种数据类型,包括一些常见数据类型的组合和嵌套,更抽象了对象世界 。其本质是规定二进制数据流的数字长度,并赋予这些操作数字数据的固定含义 。Java语言的输入输出模型随着Java语言的发展,在4之后,一种新的I/O模型NIO被提出 。
15、NIO和原始IO模型之间更大的区别是它引入了通道和选择器的概念 。它不是直接操作stream流,而是在Stream的基础上抽象出了channel的概念 。基本上,在系统级独立设置了一个管理线程来持续监控多个内存空 。
16、Ifwhich空如果不是,CPU可以忽略具体的IO操作,现代计算机硬件提供了DMA技术,所以有些I/O操作可能不需要CPU的参与 。这样做的好处是可以用最少的CPU线程资源管理多个输入输出的memory空资源 。而不是IO模型,当我们的应用需要一个IO操作的时候,整个IO操作线程都会被阻塞,等待IO操作的完成 。
17、如果应用涉及到大量的I/O操作,IO的速度和CPU与其高级缓存交换数据的速度不在一个数量级,那么这种线程阻塞和等待会大大降低CPU的利用率 。NIO模型最重要的是将各种数据流进一步抽象成通道,并添加独立的选择器线程,封装数据流过程中可能出现的行为,如连接、发送、接收、中断异常、关闭等.转化为事件,通过事件的触发告诉CPU去处理,这样就避免了特定IO线程对CPU资源的长期占用,只需要借助输入输出控制设备,就可以完成大量的工作 。数据流分类当然,上面说的数据流并没有根据什么来进一步划分数据流 。
18、事实上,我们知道基于文件块的数据流和基于流的数据流是有区别的 。我们在用Java语言编程的时候,要操作一个文件,首先需要建立一个基于文件的数据流,然后在这个流的基础上创建一个通道来指令通道 。无论是读还是写,另一端都必须是内存中打开的缓冲区 。
19、这个内存区域通常在JVM管理的堆上,由我们的应用程序控制和管理 。但是真正的输入输出操作需要操作系统来完成,所以操作系统会有自己的缓存空来拷贝数据,然后拷贝到我们应用管理的空房间 。以前基于C/C++等底层语言编程时,需要定义不同的内存空,并在这些内存空之间传递数据 。
20、在低级语言中,内存属于系统内存,也就是说我们操作的内存就是操作系统使用的内存 。如果不进行有效管理,很容易造成系统崩溃 。像Java这种高级语言编程的时候,JVM管理的这些内存空和堆空,当我们不引用这些数据的时候,有专门的垃圾收集器按需清理 。
推荐阅读
- 电脑搜狗如何输入繁体字 输入法繁体转换方法
- 表格中的斜线是什么意思怎么弄并输入文字 一分为二上下怎么打字
- java环境变量配置详细教程 初学者下载安装的方法
- CAD中如何输入平方
- jdk与jre有什么区别 javajdk与jre的区别
- 大于等于号怎么用键盘打出来 笔记本快捷键怎么输入≥符号
- 电脑word里破折号怎么输入 没断开───符号键盘上怎么打出来
- 搜狗手机输入法皮肤安装教程 免费键盘皮肤使用方法
- 千分号怎么打出来在电脑上 键盘上5‰怎么输入
- iphone(输入法怎么调出来 苹果手机如何更改输入法)
