channel java_Java Channel

1. 什么是Channel?

channel表示的是在一个实体上打开的连接

实体:

a hardware device

a file

a network socket

a program component that is capable of performing one or more distinct I/O operations, for example reading or writing

2. Channel有哪些状态?

Channel只有open和close两种状态,二者的转换状态如下:

$$

\text{open} \longrightarrow \text{close} \

\text{close} \not\longrightarrow \text{open}

$$

有API可以查看一个channel是不是open状态: isOpen

3. Channel的几个直接接口

3.1 WritableByteChannel

可以往其中写入bytes的channel,几乎总是在一个时间只有一个写操作作用于其上,是否能并发写还得看具体实现

public int write(ByteBuffer src) throws IOException;

该方法的调用时产生很多异常类型可以看出使用该方法的一些注意事项:

method

desc

NonWritableChannelException

If this channel was not opened for writing

ClosedChannelException

If this channel is closed

AsynchronousCloseException

If another thread closes this channel while the write operation is in progress

ClosedByInterruptException

If another thread interrupts the current thread while the write operation is in progress, thereby closing the channel and setting the current thread's interrupt status

3.2 ReadableByteChannel

与WritableByteChannel相反,可以从该channel中读取数据到buffer

public int read(ByteBuffer dst) throws IOException;

读取数据到buffer中,并不一定会填满整个buffer,具体还是得看实现, 例如:

处于non-block模式的socket channel,只会读取socket输入buffer中的数据,不会多读

从一个file channel中最多只能读取到文件中剩余的数据

block模式下,会读取channel中所有的数据直到最后一个byte

3.3 AsynchronousChannel

支持异步IO操作的channel

异步IO操作通常可以分为以下2种形式:

Future operation(...)

void operation(... A attachment, CompletionHandler handler)

param

desc

operation

read/write

V

IO操作的结果类型

A

附加于IO操作之上的对象类型,提供一个``context`

例如:

// AsynchronousFileChannel

// read操作的结果是读到的byte的个数,即V为Integer

public abstract void read(ByteBuffer dst,

long position,

A attachment,

CompletionHandler handler);

public abstract Future read(ByteBuffer dst, long position);

public abstract void write(ByteBuffer src,

long position,

A attachment,

CompletionHandler handler);

public abstract Future write(ByteBuffer src, long position);

3.4 NetworkChannel

socket channel

NetworkChannel bind(SocketAddress local) throws IOException;

NetworkChannel setOption(SocketOption name, T value) throws IOException;

3.5 InterruptibleChannel

可以异步关闭和中断的channel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值