• NIO的原理和文件读入读出及图片拷贝的使用


    1.NIO的简介
            java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO
            为所有的原始类型(boolean除外)提供了缓存支持
            使用它 可以提供非阻塞式的高伸缩性网络
        NIO由三个核心部分组成
            Channel 管道/通道
            Buffer 缓冲区
            Selector 选择器
        普通IO        NIO
        面向流        面向缓冲区
        阻塞IO        非阻塞
        没有选择器    选择器Selector
    阻塞和非阻塞:        

        阻塞:
                    Scanner sc = new Scanner(System.in)
                    int i = sc.nextInt();
                    阻塞是强调运行结果
                    在返回之前 当前线程会被挂起 一直处于等待状态

                    不能执行其他任务
                    函数只有在得到结果之后 才会返回

                    阻塞式IO 指的是
                    "一旦输入/输出工作没有完成 则程序阻塞 直到输入/输出完成为止"
                    不见黄河不死心
         非阻塞:
                    非阻塞和阻塞的概念是相对应的
                    非阻塞IO其实并非完全非阻塞
                    通常情况下 都是通过设置超时来读取数据的
                    未超时之前 程序阻塞
                    超时之后 程序结束

    Buffer:
                缓冲区 本质上是一块可以存储数据的内存
                    把这块区域封装成了一个Buffer对象
                Java NIO中涉及到的Buffer实现:
                    1.ByteBuffer
                    2.CharBuffer
                    3.DoubleBuffer
                    4.FloatBuffer
                    5.IntBuffer
                    6.LongBuffer
                    7.ShortBuffer

    Selector:
                实现监听的效果
                通过一个线程管理多个Channel
                从而管理多个网络连接的目的
                它是Java NIO核心组件中的一个
                用于检查一个或者多个NIO Channel的状态是否处于可读 可写
                我们可以将Channle注册到Selector中 以实现Selector对其管理的目的

    3.Buffer的使用
            Java NIO 的Buffer 用于 和 NIO通道进行交互
            数据从通道读入缓冲区
            从缓冲区写出到通道中

            常用方法:
                1.allocate(大小) 分配一块指定大小的缓冲区
                2.put() 向缓冲区写数据
                3.get() 从缓冲区读数据
                4.flip() 切换读写模式

              5.clear() 清空

              6.capacity() 获取缓冲区大小
                7.position() 获取数据存储位置
                8.limit() 长度


      作用:
                    *  1.将position设置为0
                    *  2.把limit设置为原position的值 存了多少数据
            使用步骤:
                1.创建Buffer缓冲区
                2.写入数据到Buffer
                3.调用flip()方法 切换读写模式
                4.从Buffer中读取数据
                5.调用clear()方法 清空缓冲区


        4.FileChannel的使用
            java NIO 中的FileChannel 是一个连接文件的通道
            可以通过通道 读写文件
            在使用FileChannel之前 必须先打开它

            1.可以通过
                FileInputStream/FileOutputStream 来获取 FileChannel
                    getChannel()方法
            2.调用 FileChannel中的静态open()方法 打开通道
                static FileChannel open(Path path,OpenOption...options);
                Paths 工厂类中 的方法
                static Path get(URI uri) 将给定的URI转换为Path对象。 

    5.案例
           写入文本文件

    读取文本文件


           复制图片

  • 相关阅读:
    Django的rest_framework的视图之基于通用类编写视图源码解析
    Django的rest_framework的视图之Mixin类编写视图源码解析
    Django1.0和2.0中的rest_framework的序列化组件之超链接字段的处理
    Django的restframework的序列化组件之对单条数据的处理
    Django2.0的path方法无法使用正则表达式的解决办法
    算法的时间复杂度和空间复杂度简单理解
    回归后端分页本质,理清后端分页思路
    SQL Server 2008R2向表中添加字段
    Asp.net IIS 服务器配置远程访问
    linux write 命令
  • 原文地址:https://www.cnblogs.com/wanghuaying/p/9457495.html
Copyright © 2020-2023  润新知