La diferencia entre IO tradicional y NIO
?
IO tradicional
1. Unidireccional
2. Orientado a la transmisión
?
NIO
1. Bidireccional
2. El canal es responsable de la transmisión, y el buffer es responsable del almacenamiento.
?
Concepto NIO y demostración de código
1. Caché
Área de caché directa y área de caché indirecta
非直接缓存区 通过allocate方法分配缓存区,缓存区直接建立在JVM的内存
直接缓存区 通过 allocateDirect分配缓存区 建立在os缓存
数据类型不同 提供了对应的缓存区(boolean除外)
ByteBuffer(常用)
CharBffer
缓存区的管理方式几乎一致 都是用allocate分配
缓存区存储数据有俩个方法
put 存入数据到缓冲区和
get 从缓存区获取数据
缓存区的核心属性
position = 0;缓存区正在操作数据的位置
limit;表示缓存区最大存储的数据容量 limit后的数据不能读写
capacity; 缓存区最大存储容量 一旦声明不能改变
Los cambios de atributos después de leer y escribir en el búfer
Icono indirecto del búfer
Icono de búfer directo
Código de demostración
https://gitee.com/WenHaiGo/code-mark/blob/master/IO/src/NIO/TestBuffer.java
2. Canal
La conexión entre el nodo de origen y el nodo de destino es responsable de la transmisión de datos en el área de caché en Java NIO. El canal en sí no almacena datos y debe transmitirse junto con el área de caché.
java.nio.channels.Channel接口
* 主要实现类
* --FileChannl 本地文件
* --SocketChannl TCP
* --ServerSocketChannl TCP
* --DataGramChannel UDP
1. Cómo obtener el canal
-
Java proporciona el método getChannel () para la clase que admite el canal
Local IO
FileInputStream / FileOutPutStream
RandomAccesFileNetwork IO
socket
serversocket
DatagramSocket -
Después de JDK 1.7, se proporcionó un método estático open () para cada canal
-
NewByteChannel () para la clase de utilidad Archivos después de JDK 1.7
Código de demostración
https://gitee.com/WenHaiGo/code-mark/blob/master/IO/src/NIO/TestChannelByCopyFile.java