二、Nio之Channel

1、Java NIO 的通道类似流,但又有些不同:

  既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。

  通道可以异步地读写。

  通道中的数据总是要先读到一个 Buffer,或者总是要从一个 Buffer 中写入。

2、Channel  的实现

这些是 Java NIO 中最重要的通道的实现:

  FileChannel

  DatagramChannel

  SocketChannel

  ServerSocketChannel

FileChannel 从文件中读写数据。

DatagramChannel 能通过 UDP 读写网络中的数据。

SocketChannel 能通过 TCP 读写网络中的数据。

ServerSocketChannel 可以监听新进来的 TCP 连接,像 Web 服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

3、基本Channel示例:

Java Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* nio channel 读取数据到buffer示例
* Created by 321695 on 2016/11/8.
*/

public   class FileChannelTest {
   
public   static   void main( String [] args) {
        RandomAccessFile randomAccessFile = null;

       
try {
           
//实例化randomAccessFile
            randomAccessFile = new RandomAccessFile( "E:/Dubbox/dubbo/nio-demo/src/main/resources/linux.txt" , "rw" );

           
//获取文件传输通道实例
            FileChannel fileChannel = randomAccessFile.getChannel();

           
//创建一个容量为48字节的buffer
            ByteBuffer buffer = ByteBuffer.allocate( 48 );

           
//读取数据到buffer中
            int bytesRead = fileChannel.read(buffer);

           
while (bytesRead != - 1 ) {

                System.out.println(
"Read" + bytesRead);

               
//反转buffer
                buffer.flip();

               
//若buffer中还有元素,打印出来
                while (buffer.hasRemaining()) {
                    System.out.print((
char ) buffer.get());
                }

               
//清空buffer
                buffer.clear();

               
//继续处理未完成数据
                bytesRead = fileChannel.read(buffer);

            }

           
//文件操作对象关闭
            randomAccessFile.close();
        }
catch (FileNotFoundException e) {
            e.printStackTrace();
        }
catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值