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、关通道