zoukankan      html  css  js  c++  java
  • NIO学习:使用Channel、Buffer写入文件

    NIO的效率要高于标准IO,因为NIO将最耗时的IO操作(填充和提取缓冲区)转移会操作系统。NIO以块为单位传输数据,相比标准IO的以字节为单位效率要高很多。

    通道和缓冲时NIO的核心对象,每个NIO操作都要使用到它们。

    通道是对流的模拟,但与流不同,通道的传输是双向的,一个通道可以同时用于读和写。

    缓冲区是一个容器,它包含将要写入或者刚读出的数据。使用通道进行读写时都要经过缓冲区。

    使用NIO写入文件,可以通过文件流获取通道

    FileOutputStream outputStream=new FileOutputStream(new File("/root/Desktop/test.txt"));
    FileChannel fileChannel=outputStream.getChannel();

    下一步是创建缓冲区:

    CharBuffer charBuffer=CharBuffer.allocate(1024);
    //往缓冲区存放数据
    charBuffer.put("hello world");
    //重设缓冲区
    charBuffer.flip();

    使用通道将缓冲区的内容写入文件,通道只能操作byteBuffer,所以需要使用Charset将CharBuffer转为ByteBuffer

    Charset charset=Charset.defaultCharset();
    ByteBuffer byteBuffer=charset.encode(charBuffer);
    
    //不能确定channel.write()能一次性写入buffer的所有数据
    //所以通过判断是否有余留循环写入
    while(byteBuffer.hasRemaining()){
        fileChannel.write(byteBuffer);
    }
    
    fileChannel.close();  
    outputStream.close();
  • 相关阅读:
    Git的基本使用(只是基本使用)
    GET与POST的比较
    GO开发:链表
    阿里云啊
    以太坊区块和交易存储
    以太坊私有链部署合约
    以太坊go-ethereum签名部分源码解析
    GO开发:接口
    区块链开发:以太坊网络
    Go开发[八]goroutine和channel
  • 原文地址:https://www.cnblogs.com/DajiangDev/p/3918861.html
Copyright © 2011-2022 走看看