java channel是什么,让我们一起了解一下?
Channel是通道的意思,表示IO源与目标打开的连接,类似于传统的“流”,但是Channel不能直接访问数据,需要和缓冲区buffer进行交互。
打个比喻:山西有煤,山东想要,于是乎建了一条铁路连通到山东,这条铁路就是这里的"Channel",那么煤通过什么运过来呢?铁路建好了,就差火车了,因此这里的火车就像是缓冲区,火车把山西的煤运到山东来,把我们这里的钱运过去,这样双向传输就愉快的完成了。Channel类似于传统的“流”,只不过Channel不能直接访问数据,Channel只能与buffer交互。而且流是单向的,分为输入流和输出流, 但是通道是双向的,通过缓冲区buffer两边都可达,Channel表示IO源与目标打开的连接。
获取通道的方式有哪些?
1、通过getChannel()方法获取。
前提是该类支持该方法。支持该类的方法有:
FileInputStream/FileOutputStream,RandomAccessFile,Socket,ServerSocket ,DatagramSocket
2、通过静态方法open()。
3、通过jdk1.7中Files的newByteChannel()方法。
java channel是如何实现的?
我们以AbstractChannel为例,通过提供一些公共API进行实现,比如localAddress()和 remoteAddress()方法,实现源码如下:
public SocketAddress localAddress() { SocketAddress localAddress = this.localAddress; if (localAddress == null) { try { this.localAddress = localAddress = unsafe().localAddress(); } catch (Throwable t) { // Sometimes fails on a closed socket in Windows. return null; } } return localAddress; }
以上就是小编今天的分享了,希望可以帮助到大家。