从头认识java-16.4 nio的读与写(ByteBuffer的使用)
来源:互联网 发布:wap手机网站源码 编辑:程序博客网 时间:2024/05/09 23:07
这一章节我们来讨论一下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的读与写的过程。
这一章节就到这里,谢谢。
-----------------------------------
目录
0 0
- 从头认识java-16.4 nio的读与写(ByteBuffer的使用)
- 从头认识java-16.6 ByteBuffer是怎样存储的?
- 深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别
- 深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别
- 深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别 .
- 深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别
- 深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别
- 从头认识java-16.5 nio的数据转换
- (Mina的ByteBuffer和java.nio.ByteBuffer性能对比)Performance comparision of Mina's ByteBuffer VS java.nio.ByteBuffer use.
- 对 java.nio.ByteBuffer 的粗浅理解
- 关于java.nio.ByteBuffer的一些杂七杂八。
- Java的NIO之ByteBuffer底层分析
- Java的NIO之ByteBuffer底层分析
- 从头认识java-11.5 扫描输入(2)-scanner的边界与使用正则表达式扫描
- 【Java】NIO ByteBuffer类使用
- NIO实战(二)——java.nio.ByteBuffer中flip、rewind、clear方法的区别
- 从头认识java-13.15 使用泛型时出现的问题(2)-实现参数化接口与重载
- java.nio.ByteBuffer的flip、rewind和compact几个方法的区分使用 (转载)
- 微信网站搭建步骤
- 大括号的作用
- iOS开发-常用第三方开源框架介绍
- android 仿微信联系人 首字母分组快速索引
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- 从头认识java-16.4 nio的读与写(ByteBuffer的使用)
- 系统权限控制的见解
- Hibernate的安装使用
- Objective-C语言——UIButton 按钮
- 分线程加载新界面-适用于显示等待动画
- 利用反射实现Insert方法
- ionic学习笔记5
- 似然函数
- [IMX6Q]为什么定义了CONFIG_SKIP_RELOCATE_UBOOT