<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
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;}