# Java NIO(一)FileChannel

Java NIO

1.BIO与NIO的区别

BIO为阻塞IO,NIO为非阻塞IO。

BIONIO
JAVA1.4之前Java 1.4之后
面向流:以byte为单位处理数据面向块:以块为单位处理数据
同步阻塞同步非阻塞
选择器(Selector)

1.1NIO的核心组成部分

  • Channels
    Channel是双向的,既能做读操作也能做写操作,常见Channel如下:
Channel类功能
FileChannel文件数据读写
DtagramChannelUDP数据读写
ServerScoketChannel和SocketChannelTCP数据读写
  • Buffers
    缓冲区
  • Selectors
    选择器,用于监听多个通道的事件,可实现单个线程就可以监听多个客户端通道。

2.Channel

Channel封装了对数据源的操作,可以操作多种数据源,但是不必关心数据源的具体物理结构。Channel用于在字节缓冲区和另一侧的实体之间有效地传输数据。

Channel所有数据都是通过Buffer对象进行处理,通道要么读数据到缓冲区,要么从缓冲区写入到通道。

public interface Channle extend Closeable {public boolean isOpen();public void close() throws IOException;
}
2.1 FileChannel

FileChannel常用方法如下;

方法名作用
public int read(ByteBuffer dst)从通道读取数据并放到缓冲区中
public int write(ByteBuffer src)把缓冲区的数据写到通道中
public long transferFrom(ReadableByteChannel src, long position, long count)从目标通道中复制数据到当前通道
public long transferTo(long position, long count, WritableByteChannel target)把数据从当前通道复制给目标通道

无法直接打开一个FileChannel,常见的方法是通过inPutStream和outPutStream或RandomAccessFile获取一个FileChannel实例。
示例代码
文件写入示例

package com.hero.nio.file;
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
//通过NIO实现文件IO
public class TestNIO {
@Test //往本地文件中写数据
public void test1() throws Exception{//1. 创建输出流FileOutputStream fos=new FileOutputStream("basic.txt");//2. 从流中得到一个通道FileChannel fc=fos.getChannel();//3. 提供一个缓冲区ByteBuffer buffer=ByteBuffer.allocate(1024);//4. 往缓冲区中存入数据String str="HelloJava";buffer.put(str.getBytes());//5. 翻转缓冲区buffer.flip();while(buffer.hasRemaining()) {//6. 把缓冲区写到通道中fc.write(buffer);}//7. 关闭fos.close();}
}

文件复制示例

public void test4() throws Exception {//1. 创建两个流FileInputStream fis = new FileInputStream("basic2.txt");FileOutputStream fos = new FileOutputStream("basic3.txt");//2. 得到两个通道FileChannel sourceFC = fis.getChannel();FileChannel destFC = fos.getChannel();//3. 复制destFC.transferFrom(sourceFC, 0, sourceFC.size());//4. 关闭fis.close();fos.close();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

书生·浦语大模型实战营-学习笔记6

目录 OpenCompass大模型测评1. 关于评测1.1 为什么要评测?1.2 需要评测什么?1.3 如何评测?1.3.1 客观评测1.3.2 主观评测1.3.3 提示词工程评测 2. 介绍OpenCompass工具3. 实战演示 OpenCompass大模型测评 1. 关于评测 1.1 为什么要评测&#…

人工智能系列 :与机器共生的未来

大家好,身处一个日新月异的时代,科技的浪潮汹涌而至,将人们推向未知的前方,一个充满人工智能与机器的世界。 这个未知的境地,或许令人心生恐慌,因为它的庞大未知性仿佛一团迷雾,模糊了大家的视…

Unity Mask合批情况验证

1.首先是两个Mask完全重合的情况下 每张图片使用的image都来自同一个图集 发现彼此之间是没有合批的,但是每个Mask内部是实现了合批的 经过计算此种情况的visiableList:mask1,IM1,IM2,mask2,IM3&#xf…

Docker安装Clickhouse详细教程

简介 ClickHouse是一种列式数据库管理系统,专门用于高性能数据分析和数据仓库应用。它是一个开源的数据库系统,最初由俄罗斯搜索引擎公司Yandex开发,用于满足大规模数据分析和报告的需求。 特点 开源的列式存储数据库管理系统,…

不学前沿技术与朽木浮草何异 ?Java18新特性

不学前沿技术与朽木浮草何异 ?Java18新特性 文章目录 不学前沿技术与朽木浮草何异 ?Java18新特性JEP 400:默认字符集为 UTF-8JEP 408:简易的 Web 服务器JEP 413:优化 Java API 文档中的代码片段JEP 416:使用方法句柄重新实现反射核心JEP 417: 向量 API&a…

06.搭建一个自己的私有仓库-Gitea

06.搭建一个自己的私有仓库-Gitea | DLLCNX的博客 如果你是一位程序员或者IT相关领域的从业者,那么肯定知道git,而且也或多或少接触了不少开源仓库以及公司的私有仓库,但是我们有没有想过自己也搭建一个私有仓库呢。 这么多开源仓库&#xf…

【51单片机系列】proteus中的LCD12864液晶屏

文章来源:《单片机C语言编程与Proteus仿真技术》。 点阵字符型LCD显示模块只能显示英文字符和简单的汉字,要想显示较为复杂的汉字或图形,就必须采用点阵图型LCD显示模块,比如12864点阵图型LCD显示模块。 文章目录 一、 LCD12864点…

The Sandbox 2024 Game Jam 进行中|游戏创作比赛!冲!

The Sandbox Game Jam 是面向所有游戏制作爱好者的创作比赛!我们诚邀您加入 The Sandbox 的生态系统,这里充满活力,游戏与文化相融,创作者彼此切磋,共同实现梦想。请尽情发挥你的想象力!The Sandbox 游戏由…

深度学习与大数据在自然语言处理中的应用与进展

引言 在当今社会,深度学习和大数据技术的快速发展为自然语言处理(NLP)领域带来了显著的进步。这种技术能够使计算机更好地理解和生成人类语言,从而推动了搜索引擎、语音助手、机器翻译等领域的创新和改进。 NLP的发展与技术进步…

使用Robot Framework实现多平台自动化测试

基于Robot Framework、Jenkins、Appium、Selenium、Requests、AutoIt等开源框架和技术,成功打造了通用自动化测试持续集成管理平台(以下简称“平台”),显著提高了测试质量和测试用例的执行效率。 01、设计目标 平台通用且支持不…

Linux操作系统——进程间通信简单介绍

1.进程间通信的介绍 我们之前所谈的进程很多都是通过一个进程来进行理解的,可是很多情况下有一些任务呢,他是有很多的进程通过协作完成,比如说我们之前谈到的命令行,一条命令也是用一个进程去执行的。 像这样,我们是通…

一套令我获益颇多的生活模式

你有没有过这样的感受: 有时候,会觉得自己不够好,于是下定决心,做好计划,打算作出一些改变。 但坚持了两天,却又故态复萌,回到旧的模式里。仿佛有一种力量把你往回拉扯,强迫你重复着…

用这个烟感监测技术!同事下巴都惊掉了!

在当今社会,火灾作为一种极具破坏性的灾害,对人们的生命和财产安全构成着严峻的威胁。 为了更好地预防和管理火灾风险,烟感监控系统成为一项不可或缺的技术创新。为各行各业提供了全方位、高效的火灾预警和防范手段。 客户案例 商业办公楼 …

提升效率,节省时间:如何利用享搭低代码平台快速开发应用

在当今快节奏的商业环境中,企业需要以高效的方式开发应用程序,以迅速满足市场需求并保持竞争优势。而传统的软件开发往往需要耗费大量的时间和资源,限制了企业的创新能力和快速响应能力。然而,现在有一种强大的工具可以帮助企业解…

SecureCRT的安装

SecureCRT的安装 加强版的串口调试助手 全部默认安装,默认安装在c盘 SecureCRT收费,可以下载Putty安装 后续完善

【学网攻】 第(4)节 -- 交换机划分Vlan

文章目录 【学网攻】 第(1)节 -- 认识网络 【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口 前言 网络已经成为了我们生活中不可或缺的一部分,它连接了世界各地的人们,让信息和资源得以自由流动。随着互联网的发展&am…

C# 实现 Word 加盖骑缝章效果

目录 实现效果 范例运行环境 Office DCOM 配置 设计实现 创建stamp图章类 电子章图片的计算与定位 旋转图片方法 总结 实现效果 在OA的自动化处理系统中,通过审批的最终节点,可能会对WORD文件加盖电子章,比如定位带有指定文字的Ra…

【操作系统】实验八 proc文件系统

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

ASUS华硕无畏Pro15笔记本电脑(M6500QB,M6500QH)工厂模式原厂OEM预装Windows11.22H2系统 含Recovery恢复

原装出厂Windows11系统适用于华硕无畏15笔记本电脑型号:M6500QB和M6500QH 链接:https://pan.baidu.com/s/1AVGLN6-ILIRogOMj48Mk1w?pwdmi7d 提取码:mi7d 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题专用壁纸、系统属性联机支持…

Linkedin领英账号被封是为什么?如何反封控?2024外贸拓客必看攻略

大家都知道,领英作为全球最大的职场社交平台,拥有非常精准的领域人脉,有着大量的高质客户资源,对于外贸等跨境业务来说,他是一个精准开发客户的最好渠道。 但是许多外贸小伙伴也经常遇到一个难题,那就是领…