javaaionio的简单介绍

本篇文章给大家谈谈javaaionio,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、Java NIO和IO的区别2、java中的io流分为几种3、java中什么是IO流?4、java nio 是什么?

Java NIO和IO的区别

Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。

IO                NIO

面向流            面向缓冲

阻塞IO            非阻塞IO

无                选择器

面向流与面向缓冲

Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

阻塞与非阻塞IO

Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。

选择器(Selectors)

Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来逗选择地通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

NIO和IO如何影响应用程序的设计

无论您选择IO或NIO工具箱,可能会影响您应用程序设计的以下几个方面:

1.对NIO或IO类的API调用。

2.数据处理。

3.用来处理数据的线程数。

API调用

当然,使用NIO的API调用时看起来与使用IO时有所不同,但这并不意外,因为并不是仅从一个InputStream逐字节读取,而是数据必须先读入缓冲区再处理。

数据处理

使用纯粹的NIO设计相较IO设计,数据处理也受到影响。

在IO设计中,我们从InputStream或 Reader逐字节读取数据。假设你正在处理一基于行的文本数据流,例如:

Name: Anna

Age: 25

Email: anna@mailserver.com

Phone: 1234567890

该文本行的流可以这样处理:

BufferedReader reader = new BufferedReader(new InputStreamReader(input));

String nameLine   = reader.readLine();

String ageLine    = reader.readLine();

String emailLine  = reader.readLine();

String phoneLine  = reader.readLine();

请注意处理状态由程序执行多久决定。换句话说,一旦reader.readLine()方法返回,你就知道肯定文本行就已读完, readline()阻塞直到整行读完,这就是原因。你也知道此行包含名称;同样,第二个readline()调用返回的时候,你知道这行包含年龄等。 正如你可以看到,该处理程序仅在有新数据读入时运行,并知道每步的数据是什么。一旦正在运行的线程已处理过读入的某些数据,该线程不会再回退数据(大多如此)。下图也说明了这条原则:

(Java IO: 从一个阻塞的流中读数据) 而一个NIO的实现会有所不同,下面是一个简单的例子:

ByteBuffer buffer = ByteBuffer.allocate(48);

int bytesRead = inChannel.read(buffer);

注意第二行,从通道读取字节到ByteBuffer。当这个方法调用返回时,你不知道你所需的所有数据是否在缓冲区内。你所知道的是,该缓冲区包含一些字节,这使得处理有点困难。

假设第一次 read(buffer)调用后,读入缓冲区的数据只有半行,例如,逗Name:An地,你能处理数据吗看显然不能,需要等待,直到整行数据读入缓存,在此之前,对数据的任何处理毫无意义。

所以,你怎么知道是否该缓冲区包含足够的数据可以处理呢看好了,你不知道。发现的方法只能查看缓冲区中的数据。其结果是,在你知道所有数据都在缓冲区里之前,你必须检查几次缓冲区的数据。这不仅效率低下,而且可以使程序设计方案杂乱不堪。例如:

ByteBuffer buffer = ByteBuffer.allocate(48);

int bytesRead = inChannel.read(buffer);

while(! bufferFull(bytesRead) ) {

bytesRead = inChannel.read(buffer);

}

bufferFull()方法必须跟踪有多少数据读入缓冲区,并返回真或假,这取决于缓冲区是否已满。换句话说,如果缓冲区准备好被处理,那么表示缓冲区满了。

bufferFull()方法扫描缓冲区,但必须保持在bufferFull()方法被调用之前状态相同。如果没有,下一个读入缓冲区的数据可能无法读到正确的位置。这是不可能的,但却是需要注意的又一问题。

如果缓冲区已满,它可以被处理。如果它不满,并且在你的实际案例中有意义,你或许能处理其中的部分数据。但是许多情况下并非如此。下图展示了逗缓冲区数据循环就绪地:

3) 用来处理数据的线程数

NIO可让您只使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂。

如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,实现NIO的服务器可能是一个优势。同样,如果你需要维持许多打开的连接到其他计算机上,如P2P网络中,使用一个单独的线程来管理你所有出站连接,可能是一个优势。一个线程多个连接的设计方案如

 Java NIO: 单线程管理多个连接

如果你有少量的连接使用非常高的带宽,一次发送大量的数据,也许典型的IO服务器实现可能非常契合。下图说明了一个典型的IO服务器设计:

 

 Java IO: 一个典型的IO服务器设计- 一个连接通过一个线程处理

java中的io流分为几种

分两大种,输入流和输出流

输入流分为字节输入流,字符输入流

输出流分为字节输出流,字符输出流

这四大类各自有各自的分支,各有各的功能,但总的来说主要是这四种。

字符流读速写速要比字节流快,没有乱码现象,但是它只能读写文档(txt);字节流可以读写任意文件。

java.io下是java的IO流

以下是几种常用流

FileInputStream文件字节输入流

FileOutputStream文件字节输出流

FileReader文件字符输入流

FileWriter文件字符输出流

javaaionio的简单介绍

java中什么是IO流?

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类:根据处理数据类型的不同分为:字符流和字节流;根据数据流向不同分为:输入流和输出流。

java nio 是什么?

nio是java New IO的简称,在jdk1.4里提供的新api。Sun官方标榜的特性如下:

– 为所有的原始类型提供(Buffer)缓存支持。

– 字符集编码解码解决方案。

– Channel:一个新的原始I/O抽象。

– 支持锁和内存映射文件的文件访问接口。

– 提供多路(non-bloking)非阻塞式的高伸缩性网络I/O。

关于javaaionio和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月1日 03:58:30
下一篇 2024年4月1日 04:06:45

相关推荐

  • 香蕉地c语言的简单介绍

    c语言的编译器,打开同一个程序,一样的输入,为什么有时输出是对的,有… 1、应该是两种环境下保存的源代码的格式有异。最好找个专业的文本编辑器来编辑源代码,然后再用TC来编译。比如说ULTRAEDIT。这样会省去很多麻烦。你也可以把这个工具打造成脱离TC的IDE环境的编辑,编译工具。 2、你第一个程序不报错的原因是,你把后缀名改成了.cpp2,编译…

    2024年5月18日
    3600
  • linuxrpm官网下载的简单介绍

    Linux可以用rpm下载yum或者wget或apt-get吗? 1、)rpm包,如software-3-i38rpm。他是Redhat Linux提供的一种包封装格式。包的管理工具YUM 3)dpkg包,如software-3-deb。他是Debain Linux提供的一种包封装格式。 2、可以下载安装也可以网络安装。网络安装你必须在yast里添加尽可能多…

    2024年5月18日
    4700
  • javabase64使用的简单介绍

    在Java中如何进行BASE64编码和解码 1、为了避免这种情况,您可以将字符串转换为字节数组,然后再进行Base64编码和解码。您可以使用Java的getBytes()方法将字符串转换为字节数组,并使用new String()方法将字节数组转换回字符串。 2、Java中的decodeResponse方法是一个将Base64编码后的字符串解码为字节数组的方法…

    2024年5月18日
    3600
  • deepinlinux操作系统的简单介绍

    linuxdeepin支持什么软件(deepin安装软件命令) 首先启动CrossOver,首页面分成了两部分,右侧是已安装软件,左侧就是安装功能了。我们点击“安装Windows软件…”。软件会弹出的新页面,这个页面分成了好几部分。 首先,需要用户点击dock栏上的”启动器“找到终端并运行。deepin linux下怎么在终端安装百度云 然后,执…

    2024年5月18日
    4200
  • 能不能从零学习黑客的简单介绍

    零基础学习黑客知识先看王爽的《汇编语言》和《深入了解计算机系统》行… 只要你下定决心想做一件事情,我觉得看什么书,都是可以的。 《编码:隐匿在计算机软硬件背后的语言》 ,这本书真的浅显易懂,从与非门到寄存器,再组成RAM,主要帮助你理解电信号如何转换成二进制!你看完加运算的进位电路设计就会明白“溢出”是怎么一回事了。 先看,王爽《汇编语言》 ,适…

    2024年5月18日
    3600
  • excel2010打开密码移除工具的简单介绍

    excel密码清除工具怎么使用 1、步骤一:打开加密excel表格 ,输入密码进入。 2、使用在线服务进行解锁:在搜索引擎中搜索“Excel 解锁工具”或“Excel 密码恢复”,可以找到一些在线服务,例如 LostMyPass、FreeMyPDF 等。 3、首先点击选中被加密的表格文档,按F2重命名,把文件格式改为RAR。鼠标左键双击打开该文件,并打开XL…

    2024年5月18日
    4100
  • 百度黑客学习励志头像的简单介绍

    有含义励志的微信头像 1、断翼の天使男销售用的微信头像。明日辉煌男生励志头像简单气质。再不努力我们就老了适合永久做头像的图片2021。 2、男人专用头像图片:求求几张励志的男生用的头像图片有没有 励志头像。男人专用头像图片:四十岁的男人用什么头像图片 四十岁成熟男人头像看不到脸,西装革履有范儿男生干净简约网名。 3、有品位的微信头像:谁有,有寓意的微信头像,…

    2024年5月18日
    2900
  • st7789linux的简单介绍

    linux怎样使用top命令查看系统状态 1、t:切换显示进程和CPU状态信息;c:切换显示命令名称和完整命令行;M:根据驻留内存大小进行排序;P:根据CPU使用百分比大小进行排序;T:根据时间/累计时间进行排序;w:将当前设置写入~/.toprc文件中。 2、S:Process Status 进程状态 CPU:cpu使用率 MEM:内存使用率 TIME+:…

    2024年5月18日
    4200
  • javascriptopencv的简单介绍

    opencv。因为编程需要,想要看cvWarpAffine和cvWarpPerspective的两… 1、代码较长不易呈现。图片拼接,图1为基准,变换图2。cvgetperspectivetransform(input,output,map_),求出透视变换map_矩阵(3*3)。再用cvwarpperspective做透视变换。 2、在open…

    2024年5月18日
    3400
  • excel让后面的第一列一样的简单介绍

    Excel表格,怎样让一列数据都变成跟第一行数据相同的,求好心人解答我这个… 直接复制首个单元格内容,然后选中想要粘贴的整列单元格,使用CTRL+V,或者右键选择性粘贴,然后选择仅数值即可,则整列数值都会是同样的数字。 本次使用Office办公软件Excel 2013版本用于操作如何将表格中所有数据变成一样的数值。首先新建Excel电子表格,在表…

    2024年5月18日
    5300

发表回复

登录后才能评论



关注微信