博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从头认识java-16.4 nio的读与写(ByteBuffer的使用)
阅读量:5906 次
发布时间:2019-06-19

本文共 1649 字,大约阅读时间需要 5 分钟。

这一章节我们来讨论一下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的读与写的过程。

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

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

你可能感兴趣的文章
树的总结--树的性质(树的深度) leetcode
查看>>
【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!...
查看>>
linux 将大文件分成小文件
查看>>
CCNA- 距离矢量路由协议学习
查看>>
企业实践用户邮箱导入/导出(第2部分)
查看>>
如何学习Linux命令-初级篇
查看>>
从Oracle Public Yum为Oracle Linux建立本地的Yum源
查看>>
静态路由和默认路由
查看>>
关于阿里开发者招聘节 |这5道笔试真题 你会吗!???
查看>>
C#的异常处理机制
查看>>
vsftp:500 OOPS: could not bind listening IPv4 sock
查看>>
Linux安装BTCPayServer并设置比特币BTC和Lightning支付网关
查看>>
mysql安装,远程连接,以及修改密码
查看>>
Mybatis查询返回Map类型数据
查看>>
java的深拷贝与浅拷贝
查看>>
程序员如何提高工作效率
查看>>
promise
查看>>
将Java应用部署到SAP云平台neo环境的两种方式
查看>>
数据批量导入Oracle数据库
查看>>
调用lumisoft组件发邮件 不需要身份验证 不需要密码
查看>>