Java-杂项-java.nio:java.nio

ylbtech-Java-杂项-java.nio:java.nio

java.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。

1.返回顶部

1、

中文名:java非阻塞式IO
外文名:java nio
缓冲区:数据容器
特    性:Channel,Buffer,Selector
简    称:nio
目    的:提供非阻塞式的高伸缩性网络

目录

  1. 简介
  2. 描述
  1. 通道
  2. 缓冲区
  1. 判断
  2. 初始版本

2、

2.返回顶部

1、

简介

Sun 官方标榜的特性如下: 为所有的原始类型提供(Buffer)缓存支持。字符集编码解码解决方案。 Channel :一个新的原始I/O 抽象。 支持锁和内存映射文件的文件访问接口。 提供多路(non-blocking) 非阻塞式的高伸缩性网络I/O 。

描述

定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。

NIO API 的集中抽象为:

缓冲区,它们是数据容器;

字符集及其相关解码器 和编码器,

它们在字节和 Unicode字符之间进行转换;

各种类型的通道,它们表示到能够执行 IO 操作的

实体的连接;以及选择器 和选择键,它们与

可选择信道 一起定义了多路的、无阻塞的

I/O 设施。

java.nio 包定义了缓冲区类,这些类用于所有 NIO API。java.nio.charset包中定义了字符集API,java.nio.channels包中定义了信道和选择器 API。每个子包都具有自己的服务提供程序接口(SPI) 子包,SPI 子包的内容可用于扩展平台的默认实现或构造替代实现。

缓冲区

描述

Buffer 位置,界限和容量;

清除,反转,重绕和标记/重置

ByteBuffer Get/put,压缩,查看;分配,包装

MappedByteBuffer 映射到文件的字节缓冲区

CharBuffer Get/put,压缩;分配,包装

DoubleBuffer ‘ ‘

FloatBuffer ‘ ‘

IntBuffer ‘ ‘

LongBuffer ‘ ‘

ShortBuffer ‘ ‘

ByteOrder 字节顺序的类型安全的枚举

通道

Channel是一个对象,可以通过它读取和写入数据。拿 NIO 与原来的 I/O 做个比较,通道就像是流,而且他们面向缓冲区的。

正如前面提到的,所有数据都通过 Buffer 对象来处理。您永远不会将字节直接写入通道中,相反,您是将数据写入包含一个或者多个字节的缓冲区。同样,您不会直接从通道中读取字节,而是将数据从通道读入缓冲区,再从缓冲区获取这个字节。

通道与流的不同之处在于通道是双向的。而流只是在一个方向上移动(一个流必须是 InputStream 或者 OutputStream 的子类), 而 通道 可以用于读、写或者同时用于读写。

因为它们是双向的,所以通道可以比流更好地反映底层操作系统的真实情况。特别是在 UNIX 模型中,底层操作系统通道是双向的。

缓冲区

是一个固定数据量的指定基本类型的数据容器。除内容之外,缓冲区还具有位置 和界限,其中位置是要读写的下一个元素的索引,界限是第一个应该读写的元素的索引。基本 Buffer 类定义了这些属性以及清除、反转 和重绕 方法,用以标记 当前位置,以及将当前位置重置 为前一个标记处。

每个非布尔基本类型都有一个缓冲区类。每个类定义了一系列用于将数据移出或移入缓冲区的 get 和 put 方法,用于压缩、复制 和切片 缓冲区的方法,以及用于分的异类或同类二进制数据序列),访问要么是以 big-endian字节顺序进行,要么是以 little-endian 字节顺序进行。

判断

由于客户端断开连接时,服务器端SocketChannel不会立即自动改变连接状态,其仍然可以read()。所以通常以read()返回值进行判断。当read()返回为-1时即判断该连接断开。即当channel读到末尾后仍然没有数据发送,服务器即断开连接。

初始版本

从以下版本开始:

1.4

2、

3.返回顶部
4.返回顶部
5.返回顶部

1、

https://baike.baidu.com/item/java.nio/5180052

2、

6.返回顶部
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/storebook/p/11096837.html

时间: 2024-11-05 22:05:35

Java-杂项-java.nio:java.nio的相关文章

5种调优Java NIO和NIO.2的方式

Java NIO(New Input/Output)——新的输入/输出API包——是2002年引入到J2SE 1.4里的.Java NIO的目标是提高Java平台上的I/O密集型任务的性能.过了十年,很多Java开发者还是不知道怎么充分利用NIO,更少的人知道在Java SE 7里引入了更新的输入/输出 API(NIO.2).这篇教程展示了5个在Java编程的一些常见场景里使用NIO和NIO.2包的简单示例. NIO和NIO.2对于Java平台最大的贡献是提高了Java应用开发中的一个核心组件的

Java NIO、NIO.2学习笔记

相关学习资料 http://www.molotang.com/articles/903.html http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html 目录 1. NIO.NIO.2简介 2. NIO中的关键技术 1. NIO.NIO.2简介 Java中的输入流.输出流都是阻塞式的输入.输出.不仅如此,传统的输入流.输出流都是通过字节的移动来处理的(即使是字符流,在底层也是通过字节流来进行处理的),也就是说,面向

(转载)Java NIO:NIO概述(一)

Java NIO:NIO概述 在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题.NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题.本文下面分别从Java NIO的几个基础概念介绍起. 以下是本文的目录大纲: 一.NIO中的几个基础概念 二.Channel 三.Buffer 四.Selector 为了对原作者以示尊重,标明原文链接:  http://www.cnblogs.com/dolphin0520/p/3919162.html 一.NIO中的几

java io 网络编程 高性能NIO

很久没写了,一是觉得这后台不怎么方便,二是 写的时候突然觉得没兴趣了. 还好,今天突然想记一下,那就随便写吧.  1.一开始还是放几个连接.  什么是 同步,异步,阻塞,非阻塞 : http://blog.csdn.net/historyasamirror/article/details/5778378        从Jetty.Tomcat和Mina中提炼NIO构架网络服务器的经典模式:http://blog.csdn.net/cutesource/article/details/61920

Five ways to maximize Java NIO and NIO.2--reference

Java NIO -- the New Input/Output API package-- was introduced with J2SE 1.4 in 2002. Java NIO's purpose was to improve the programming of I/O-intensive chores on the Java platform. A decade later, many Java programmers still don't know how to make th

Five ways to maximize Java NIO and NIO.2--转

原文地址:http://www.javaworld.com/article/2078654/java-se/java-se-five-ways-to-maximize-java-nio-and-nio-2.html Java NIO -- the New Input/Output API package-- was introduced with J2SE 1.4 in 2002. Java NIO's purpose was to improve the programming of I/O-

Java异步非阻塞IO NIO使用与代码分析

[TOC] Java异步非阻塞IO NIO使用与代码分析 TimeServer程序的NIO实现完整代码 TimeServer程序来自书本<Netty权威指南>,nio的代码确实有些难懂(这也是后面需要使用Netty的原因之一),不过我对代码加了注释,这样一来对nio的概念及基本的使用都会有一个非常清晰的认识: 服务端程序 TimeServer.java: package cn.xpleaf.nio; public class TimeServer { public static void ma

Java的中BIO、NIO、AIO-2

Java的中BIO.NIO.AIO-2 java 举个栗子 接上一篇接着说,C/S模式.Reactor模式.Proactor模式是服务器处理IO常用的处理模型,这一篇就来解释一下这几种模式: 以一个餐饮为例,每一个人来就餐就是一个事件,他会先看一下菜单,然后点餐.就像一个网站会有很多的请求,要求服务器做一些事情.处理这些就餐事件的就需要我们的服务人员了. 在多线程处理的方式会是这样的: 一个人来就餐,一个服务员去服务,然后客人会看菜单,点菜. 服务员将菜单给后厨. 二个人来就餐,二个服务员去服务

Java的中BIO、NIO、AIO-1

Java的中BIO.NIO.AIO-1 java 最近在项目中用到TCP通信来完成命令和运行结果的交互,用的是典型的TCP通信中的C/S架构,原因很简单:在业务需求低的环境下,这种架构简单.稳定还容易写.但是在实际部署的情况下,一直出现读不到数据的空指针异常,按说BIO模式开发的应该阻塞直到有数据读取,没有找到原因就变通写了一个消息队列,使用定时器每1s从定时器中拿数据,解决了这个问题.但是想想这种同步阻塞的形式,就想了解一下其他的模式:NIO.AIO.好了,啰嗦了好多,进入正题: IO操作的基

Java中的BIO、NIO、AIO-3

Java中的BIO.NIO.AIO-3 java 这一篇是代码篇,敲代码有助于理解记忆这些抽象的东西: 参考资料: http://www.blogjava.net/killme2008/archive/2012/09/17/295743.html Java AIO初探(异步网络IO) https://www.ibm.com/developerworks/cn/java/j-lo-nio2/index.html 在 Java 7 中体会 NIO.2 异步执行的快乐 https://blog.csd