Channel与流的区别:
1、Channel和Buffer之间的读写是双向的,流的读写是单向的
2、Channel可以异步读写
3、Channel的数据读写必须依赖于Buffer
这些是Java NIO中最重要的通道的实现:
FileChannel DatagramChannel SocketChannel ServerSocketChannel
基本的 Channel 示例
下面是一个使用FileChannel读取数据到Buffer中的示例:
01
RandomAccessFile aFile =
new
RandomAccessFile(
"data/nio-data.txt"
,
"rw"
);
02
FileChannel inChannel = aFile.getChannel();
04
ByteBuffer buf = ByteBuffer.allocate(
48
);
06
int
bytesRead = inChannel.read(buf);
07
while
(bytesRead != -
1
) {
09
System.out.println(
"Read "
+ bytesRead);
12
while
(buf.hasRemaining()){
13
System.out.print((
char
) buf.get());
17
bytesRead = inChannel.read(buf);
注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。
转载自
并发编程网 – ifeve.com