请输入您要查询的百科知识:

 

词条 java.nio
释义

NIO 简介

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

软件包 java.nio 的描述

定义作为数据容器的缓冲区,并提供其他 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 字节顺序的类型安全的枚举

缓冲区

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

每个非布尔基本类型都有一个缓冲区类。每个类定义了一系列用于将数据移出或移入缓冲区的 get 和 put 方法,用于压缩、复制 和切片 缓冲区的方法,以及用于分配 新缓冲区和将现有数组包装 到缓冲区中的静态方法。

因为字节缓冲区可以用作 I/O 操作的源缓冲区和目标缓冲区,所以可以对它们加以区分。它们还支持其他缓冲区类所没有的几个特性:

可以将字节缓冲区分配为一个直接 缓冲区,在这种情况下,Java 虚拟机将最大限度地直接在缓冲区上执行本机 I/O 操作。

可以通过 mapping 将文件区域直接包装到内存中来创建字节缓冲区,在这种情况下,可以使用 MappedByteBuffer 类中定义的几个其他文件相关的操作。

字节缓冲区提供了对其内容的访问(其内容作为任何非布尔基本类型的异类或同类二进制数据序列),访问要么是以 big-endian 字节顺序进行,要么是以 little-endian 字节顺序进行。

除非另有说明,否则向此包的任何类或接口中的构造方法或方法传递 null 变量,都会抛出 NullPointerException。

通道

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

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

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

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

开始版本

从以下版本开始:

1.4

连接断开判断

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

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/26 8:12:01