相关文章推荐
活泼的扁豆  ·  linux下创建和删除软、硬链接 - ...·  1 年前    · 
霸气的小熊猫  ·  dockerfile 获取build ...·  2 年前    · 
路过的松球  ·  三階張量在GPU上的原地轉置__臺灣博碩士論 ...·  2 年前    · 
从未表白的脆皮肠  ·  Android-->View.setX()和 ...·  2 年前    · 
曾深爱过的消炎药  ·  R语言——日期时间处理 - 知乎·  2 年前    · 
Code  ›  通道和FileChannel的使用开发者社区
bytebuffer
https://cloud.tencent.com/developer/article/1470184
慷慨大方的苦瓜
2 年前
作者头像
Java栈
0 篇文章

通道和FileChannel的使用

原创
前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > Java栈 > 通道和FileChannel的使用

通道和FileChannel的使用

原创
作者头像
Java栈
修改 于 2019-07-24 10:34:22
1.1K 0
修改 于 2019-07-24 10:34:22
举报

Java NIO FileChannel

Java NIO FileChannel是连接文件的通道。使用FileChannel,您可以从文件中读取数据和将数据写入文件。Java NIO FileChannel类是NIO用于替代使用标准Java IO API读取文件的方法。

FileChannel 无法设置为非阻塞模式。它总是以阻止模式运行。

开启FileChannel

使用之前, FileChannel 必须被打开,但是你无法直接打开FileChannel。需要通过InputStream,OutputStream或RandomAccessFile获取FileChannel。

以下是通过RandomAccessFile打开FileChannel的方法:

RandomAccessFile aFile = new RandomAccessFile(“data / nio-data.txt”,“rw”);
FileChannel inChannel = aFile.getChannel();

从FileChannel读取数据

要从 FileChannel 读取数据,您需要调用 read() 方法。

代码展示:

ByteBuffer buf = ByteBuffer.allocate(48);
int bytesRead = inChannel.read(buf);

首先:给 Buffer 分配大小, 从中FileChannel读取的数据会被读入 Buffer 。

其次:调用FileChannel的read() 方法。这个方法从FileChannel读取数据读入到 Buffer 。 read() 方法返回值是 int类型,表示 多少个字节被插入 Buffer 。如果返回-1,则到达文件结尾即文件读取完成。

将数据写入FileChannel

使用 Fwrite() 方法将数据写入ileChannel,该方法使用 Buffer 作为参数。

代码展示:

String newData =“要写入文件的新字符串...”+ System.currentTimeMillis();
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
 
推荐文章
活泼的扁豆  ·  linux下创建和删除软、硬链接 - 小炒花生米 - 博客园
1 年前
霸气的小熊猫  ·  dockerfile 获取build Args dockerfile 获取外面参数_mob64ca1411a6fc的技术博客_51CTO博客
2 年前
路过的松球  ·  三階張量在GPU上的原地轉置__臺灣博碩士論文知識加值系統
2 年前
从未表白的脆皮肠  ·  Android-->View.setX()和.setY()的使用(移动布局,设置布局位置,动态添加View)_angcyo的博客-CSDN博客
2 年前
曾深爱过的消炎药  ·  R语言——日期时间处理 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号