NIO学习笔记(二)channel

CPU—中央处理器
Channel —独立的处理器–专门用于IO–附属于CPU

1:用于源节点与目标节点的链接,
在JAVA NIO中负责缓冲区中数据的传输。channel本身不存储数据,需要配合缓冲区进行传输。
2:主要分类
java.nio.channels.Channel
| – FileChannel
| – SocketChannel
| – ServerSocketChannel
| – DatagramChannel
3.获取通道
I、java针对支持通道的类提供了getChannel()方法
本地IO:
FIleInputStream/FileOutPutStream
RandomAccessFile
网络IO;
Socket
ServerSocket
DatagramSocket
II、jdk 1.7中 NIO.2 针对各个通道提供了一个静态方法open()
III、jdk1.7中NIO.2的files工具类的newByteChannel()
4、操作(一)(非直接缓冲区)

  I、 获取通道 
  II、分配指定大小的缓冲区
  III、将通道中的数据存到缓冲区
  IV、切换成读数据模式,读取缓冲区数据写到输出的通道中,clear缓冲区
  V、关通道,关流

5、操作(二)(直接缓冲区内存映射文件)(效率高,但不稳定)

  I、open(Path,standardOpenOption枚举类型的读)获取读Channel
  II、open(Path,standardOpenOption枚举类型的写+读,create_new枚举)获取写Channel
  III、MappedByteBuffer inBuffer = inChannel.map(MapMode.Read_only,0,inchannel.size());
  IV、MappedByteBuffer outBuffer = outChannel.map(MapMode.Read_Write,0,inchannel.size());
  V、 byte[] dst = new Byte[inBuffer.limit];
  	inBuffer.get(dst);
  	outBuffer.put(dst);
  VI、关通道

6、通道之间的数据传输(直接缓冲区方式)

  I、open(Path,standardOpenOption枚举类型的读)获取读Channel
  II、open(Path,standardOpenOption枚举类型的写+读,create_new枚举)获取写Channel
  III、inchannel.transferTo(0,inChannel.size(),outChannel);
  	/outChannel.transferFrom(inChannel,0,inChannel.size());
  IV、关通道

猜你喜欢

转载自blog.csdn.net/weixin_39781526/article/details/85038519