这一章节我们来讨论一下nio的读与写。

1.nio的读

package com.ray.ch16;import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;public class Test {public static void main(String[] args) throws IOException {RandomAccessFile aFile = new RandomAccessFile("d://fg.ini", "rw");FileChannel inChannel = aFile.getChannel();ByteBuffer buf = ByteBuffer.allocate(48);int bytesRead = inChannel.read(buf);while (bytesRead != -1) {buf.flip();while (buf.hasRemaining()) {System.out.print((char) buf.get());}buf.clear();bytesRead = inChannel.read(buf);}aFile.close();}
}

过程图:(引用自http://www.iteye.com/magazines/132-Java-NIO)

数据读取的过程:

(1)nio不像io那样直接输出流,而是先建立输送数据的管道

(2)nio通过一个buffer缓存器来进行交互。而不再是直接读取流

(3)ByteBuffer.allocate(48)里面的数字决定缓存器的存储数据大小

(4)buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。

(5)假设你断点在输出语句上面,就能够发现一个比較特别的现象,它的输出是一个一个英文字符,像打字一样的输出

2.nio的写

package com.ray.ch16;import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;public class Test {public static void main(String[] args) throws IOException {RandomAccessFile aFile = new RandomAccessFile("d://123.txt", "rw");FileChannel inChannel = aFile.getChannel();ByteBuffer buf = ByteBuffer.wrap("hello world tttttttttttttt".getBytes());inChannel.write(buf);buf.clear();inChannel.close();aFile.close();}
}

数据写入的过程:

(1)nio不像io那样直接输入流,而是先建立输送数据的管道

(2)nio通过一个buffer缓存器来进行交互。而不再是直接写入流

(3)使用ByteBuffer.wrap写入缓存器。因为缓存器仅仅接受二进制数据,因此须要把里面的数据转换格式

(4)通过通道,把缓存器里面的数据输送到文件中面

总结:这一章节主要介绍了nio的读与写的过程。

这一章节就到这里,谢谢。

-----------------------------------

文件夹

转载于:https://www.cnblogs.com/jhcelue/p/7068274.html

从头认识java-16.4 nio的读与写(ByteBuffer的使用)相关推荐

  1. java使用poi操作excel(读、写)

    摘要: Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2007 ...

  2. Java NIO学习笔记之图解ByteBuffer

    转载自 Java NIO学习笔记之图解ByteBuffer ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要 ...

  3. Java IO BIO NIO

    Java IO BIO NIO 一.Java I/O概述 1.1 什么是流 1.2 流的分类 1.3 字符流 1.3.1 Reader 1.3.2 Writer 1.4 字节流 1.4.1 Input ...

  4. Java 7 中 NIO.2 的使用——第四节 文件和目录

    Files类提供了很多方法用于检查在于你真正实际去操作一个文件或目录.这些方法强烈推荐,也非常有用,也能避免很多异常的发生.例如,一个很好的习惯就是在你试着移动一个文件从一个地方到另一个地方的时候,先 ...

  5. java输入输出流_金九银十准备季:Java异常+Java IO与NIO面试题(含答案)

    写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址:abel-max/Java-Study ...

  6. java学习之nio

    Java NIO 完全学习笔记(转) 本篇博客依照 Java NIO Tutorial 翻译,算是学习 Java NIO 的一个读书笔记.建议大家可以去阅读原文,相信你肯定会受益良多. 1. Java ...

  7. buffer java作用_Java NIO之Buffer的使用

    目录 Buffer简介 Buffer的核心属性 Buffer的创建与使用(ByteBuffer为例) 总结 参考资料 Buffer简介 缓冲区(Buffer):本质上是一个数组,用于临时保存.写入以及 ...

  8. NIO入门系列之第3章:从理论到实践:NIO 中的读和写

    3.1  概述 读和写是 I/O 的基本过程.从一个通道中读取很简单:只需创建一个缓冲区,然后让通道将数据读到这个缓冲区中.写入也相当简单:创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入 ...

  9. 五.Java IO、NIO、文件、通讯

    2019独角兽企业重金招聘Python工程师标准>>> Java 的 I/O 大概可以分成四组: 基于字节操作的 I/O :InputStream 和 OutputStream 基于 ...

  10. NIO详解(十三):Java IO 和NIO 总结

    1. 概述 下面总结了Java NIO和IO之间的主要差别 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 2. Java IO和 NIO的主要区别 2.1 面向流和面向缓冲区 Ja ...

最新文章

  1. matplotlib输出图形到网页_【Python】No.2 Numpy和Matplotlib初体验
  2. 《Java解惑》陷阱和缺陷的目录
  3. android+包+反编译,简单的Android之apk包反编译方法
  4. TWaver初学实战——炫动2D机房之设备篇
  5. http请求中的Query String Parameters、Form Data、Request Payload
  6. 怎么让打印出来表格的纸下面显示页数_4个使用频率较高的Excel打印技巧,办公室打印文件时常常会用到!...
  7. MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
  8. evernote 的美中不足
  9. 给自己一个没有退路的悬崖
  10. CPT205-Computer Graphics
  11. CLion中malloc头文件显示未找到
  12. protoc库的卸载与安装
  13. 备件管理系统c语言,图书管理系统的设计与开发及体育用品库存管理系统设计.doc...
  14. TSC打印机使用教程终极版(转)
  15. windows服务器ie兼容视图信息注册表项
  16. Vue.js 组件 - 组件间的循环引用
  17. gfortran版本
  18. 云服务器一键搭建脚本
  19. 常见的DNS攻击与相应的防御措施
  20. python练习题-运算符和变量练习作业题

热门文章

  1. c语言输出菱形for循环_C语言如何输出菱形
  2. 经典神经网络 -- MobileNet : 设计原理与pytorch实现
  3. arcgis 属性表中起点终点创建线_【ArcGIS开发】shapefile矢量数据遍历、求交、与属性更新...
  4. eclipse设置utf8编码_技术分享 | MySQL 8.0:字符集从 utf8 转换成 utf8mb4
  5. linux基础网络设置及使用DHCP动态配置主机地址
  6. Spring+quartz集群配置,Spring定时任务集群,quartz定时任务集群
  7. 【.bash_profile 与 .bashrc 的区别】
  8. hdu1505 dp:01矩形中最大面积全0矩阵
  9. 1月15 remap 标签的使用(源代码成功运行,但通信有问题,可能是remap的问题)
  10. 32位寄存器用法介绍