Channel(通道)的简介
来源:互联网 发布:java set 取值 编辑:程序博客网 时间:2024/05/21 10:25
通道简介:
通道是由java.nio.channel包定义的。通道表示到I/O源或目标的打开连接。通道实现了Channel接口并扩展了Closeable接口,并且从JDK7开始还扩展了AutoCloseable接口。通过实现AutoCloseable接口,可以使用JDK7新增的带资源的try语句管理通道
Java NIO的通道类似流,但又有些不同:
- 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
- 通道可以异步的读写
- 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:
Channel的实现:
这些是Java NIO中最重要的通道的实现:
- FileChannel 从文件中读写数据
- DatagramChannel 能通过UDP读写网络中的数据
- SocketChannel 能通过TCP读写网络中的数据
- ServerSocketChannel 可以监听新进来的TCP连接。像web服务器那样对新进来的每一个连接都会创建一个SocketChannel
获取通道的一种方式是对支持通道的对象调用getChannel()方法。例如以下I/O类支持getChannel()方法:
DatagramSocket FileInputStream FileOutputStream
RandomAccessFile ServerSocket Socket
根据调用getChannel()方法的对象的类型返回特定类型的通道。例如,当对FileInputStream、FileOutputStream或RandomAccessFile对象调用getChannel()方法时,会返回FileChannel类型的通道。当对Socket对象调用getChannel()方法时,会返回SocketChannel类型的通道。
获取通道的另外一种形式是使用Files类定义的静态方法,该类是由JDK7新增的。例如使用Files类,可以通过newByteChannel()方法获取字节通道,该方法返回一个SeekableByteChannel对象,SeekableByteChannel是FileChannel实现的一个接口
所有通道都支持一些额外的方法,通过这些方法可以访问和控制通道。例如FileChannel支持获取或设置当前位置的方法、在文件通道之间传递信息的方法、获取当前通道大小的方法以及锁定通道的方法,等等从JDK7开始,FileChannel还提供了静态的OPen()方法,该方法打开文件并返回执行文件的通道。这提供了获取通道的另外一种
方式。FileChannel还提供了map()方法,通过该方法可以将文件映射到缓存。
基本的Channel示例
下面是一个使用FileChannel读取数据到Buffer中的示例:
import java.io.*;import java.nio.*;import java.nio.channels.*; class ChannelDEmo {public static void main(String[] args){try(RandomAccessFile aFile=new RandomAccessFile("c:1.txt","rw")){FileChannel inChannel=aFile.getChannel();ByteBuffer buf=ByteBuffer.allocate(48);int br=inChannel.read(buf);while(br!=-1){System.out.println("Read "+br);buf.flip();while(buf.hasRemaining()){System.out.print((char)buf.get());}buf.clear();br=inChannel.read(buf);}}catch(IOException e){System.out.println("IOException :"+e);}}}
- Channel(通道)的简介
- java NIO入门简介 Buffer(缓冲区)与Channel(通道)的相关知识
- Java-NIO(四):通道(Channel)的原理与获取
- channel --通道
- java NIO 的通道Channel的理解
- Java的NIO之Channel通道
- Java的NIO之Channel通道
- Java NIO学习5(通道Channel)
- NIO通道(channel)原理与获取
- java新IO---通道(Channel)
- 积分通道特征(Integral Channel Features)(我写的(文章的部分内容))
- Java nio 学习笔记(一) Buffer(缓冲区)与Channel(通道)的相关知识
- Java nio 学习笔记(一) Buffer(缓冲区)与Channel(通道)的相关知识
- Java nio 学习笔记(一) Buffer(缓冲区)与Channel(通道)的相关知识
- Java nio 学习笔记(一) Buffer(缓冲区)与Channel(通道)的相关知识
- Java nio 学习笔记(一) Buffer(缓冲区)与Channel(通道)的相关知识
- Java nio 学习笔记(一) Buffer(缓冲区)与Channel(通道)的相关知识
- Java-NIO(五):通道(Channel)的数据传输与内存映射文件
- 2H03-view-radio-group-rating-bar
- 欧拉计划是什么?
- C语言 内存管理详解
- java 内存溢出
- 浏览器加载和渲染html的顺序
- Channel(通道)的简介
- 历届试题 地宫取宝
- python2.7.5实现ROT13编解码
- CSS定义input disabled样式
- OCP 1Z0 051 68
- 给dede栏目添加上缩略图功能
- Boost 库多线程编程一
- Kendo UI-html5 ui开源框架
- 如何获取ios应用的URL Schemes