Java NIO 核心API
Java NIO 中Channel,Buffer 和 Selector 构成了核心的API 。
Channel
Channel(通道)和IO中的流是差不多一个等级的 。只不过流是单向的,譬如:InputStream, OutputStream.而Channel是双向的,既可以用来进行读操作,又可以用来进行写操作 。
NIO中的Channel的主要实现有:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
分别可以对应文件IO、UDP和TCP(Server和Client) 。
Buffer
NIO中的关键Buffer实现有:ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer,分别对应基本数据类型: byte, char, double, float, int, long, short 。
选择器(Selectors)
Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道 。这种选择机制,使得一个单独的线程很容易来管理多个通道 。
实例代码五:
//使用NOI输出public static void inputNIOChannel() throws IOException {//创建一个File实例File file = new File("/home/wenhaibo/IOTest.txt");//FileInputStream为文件输入流FileInputStream in = new FileInputStream(file);//缓冲器向通道输入数据FileChannel fileChannel = in.getChannel();//创建一个容量为1024字节的ByteBufferByteBuffer buf = ByteBuffer.allocate(1024);//写入数据到Bufferint bytesRead = fileChannel.read(buf);while(bytesRead != -1){//回绕缓冲区(输出通道会从数据的开头而不是末尾开始)buf.flip();while(buf.hasRemaining()){System.out.print((char)buf.get());}/*** 压缩此缓冲区,compact方法会执行两个动作* 1.清除之前写好的字符* 2.通过标记位置为0* 这就为什么要结合filp()使用*/buf.compact();//写入数据到BufferbytesRead = fileChannel.read(buf);}}实际应用中在不考虑并发和读取/写入数据使用频率比较高的情况下Java IO已经可以胜任,但在使用到网络IO中Java IO已经不能满足实际需求,Java NIO 无疑是更好的选择 。推荐阅读
- JavaScript数组去重的方法有哪些?学会这9招,再也不怕算法题了
- 这些著名数据库之间的“关系”,你知道吗?
- Go 和 Java 对比学习:单例模式
- 湖北宜昌红茶,宜红全称宜昌功夫红茶功夫红茶品种之
- 超详细解析FFplay之数据读取线程
- 宋辽战争双方伤亡 宋朝灭亡之战
- 于谦为什么不阻止夺门 于谦为什么不阻止夺门之变
- 秦始皇陵墓为 秦始皇陵墓不解之谜
- 阴晋之战秦国国君 阴晋之战为什么不灭秦
- 基诺族的饮茶习惯文化,茶之于汴京是文化的代表
