zoukankan      html  css  js  c++  java
  • JavaNIO

    Java New IO 简称 nio,在jdk1.4提供了新的api,有如下特性:

    1.为所有原始类型提供缓存支持

    2.字符集编解码解决方案

    3.Channel:新的原始io抽象

    4.支持锁和内存映射的访问接口

    5.提供多路(non-bloking)非阻塞式多路高伸缩性网络io

     nio的两个创新:

    缓冲区

    通道

    原始io与nio比较:

    1.原始java.io.*包库与nio最重要的区别是数据打包和传输方式,io中使用流的方式处理数据,nio中使用块的方式处理数据。

    流:流方式处理数据是输入一个字节,输出一个字节。处理比较慢

    块:块的方式处理数据每步操作产生或者消费一个数据块,处理速度快。

    数据缓冲区:

    找了个博客,里面有比较详细的介绍,就不写了http://www.cnblogs.com/chenpi/p/6475510.html

     api测试:

    package com.gengsc.buffer;
    
    import java.nio.IntBuffer;
    import java.util.Arrays;
    
    import javax.swing.ButtonGroup;
    
    /**
     * @author shichaogeng
     *
     * 2017年7月12日
     */
    public class BufferTest {
    
        public static void main(String[] args) {
            
            //创建指定长度的缓冲区
            IntBuffer buffer = IntBuffer.allocate(10);
            
            //使用数组创建缓冲区数组
            int[] arr = {1, 3, 5};
            //未修改缓冲区之前的数组
            System.out.println("未修改缓冲区之前的数组: ");
            System.out.println(Arrays.toString(arr));
            buffer = buffer.wrap(arr);
            
            //使用offset
            buffer = buffer.wrap(arr, 0, 2);
            
            //修改元素位置
            buffer.put(0, 7);
            
            //遍历缓冲区数组
            System.out.println("缓冲区数组如下: ");
            for (int i = 0; i < buffer.limit(); i++) {
                System.out.println(buffer.get());
            }
            
            System.out.println("原始数据: ");
            System.out.println(Arrays.toString(arr));
            
            buffer.clear();
            buffer.flip();
            System.out.println(buffer);
            
            System.out.println(buffer.duplicate());
        }
    }

    通道:

    通道(channel)用于字节缓冲区与通道另一侧实体(文件或者套接字)有效的传输数据。

    两种通道:

    File通道 FileChannel

      FileChanel只能通过file对象调用getChannel获取

    Scoket通道 SocketChannel SocketServerChannel DatagramChannel

    通道分为单向(unidirectionnal)和双向(bidirectional)的

    实现WritableByteChannel的write方法和实现ReadableByteChannel的read方法,那么它是一个单向通道。

    同时实现上述两个接口的类就是双向通道。

    通道的阻塞和非阻塞:

    非阻塞模式(no-blocking)永远不会让调用的线程休眠。请求操作要么立即返回,要么返回结果表明未进行操作。只有面向流的通道,sockets和pipes才使用非阻塞通道。

  • 相关阅读:
    前端分页功能的实现以及原理
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
    Jquery实现的几款漂亮的时间轴
    jQuery点击弹出层,弹出模态框,点击模态框消失
    如何用CSS快速布局(一)—— 布局元素详细
    验证控件jQuery Validation Engine调用外部函数验证
    Javascript实现页面跳转的几种方式
    最详细win7下手动搭建PHP环境:apache2.4.23+php7.0.11
    spark调优——JVM调优
    spark调优——Shuffle调优
  • 原文地址:https://www.cnblogs.com/gengsc/p/7152102.html
Copyright © 2011-2022 走看看