java数据通道,Java NIO系列教程(五) 通道之间的数据传输

Java NIO系列教程(五) 通道之间的数据传输

在 Java NIO 中,若是两个通道中有一个是 FileChannel,那你能够直接将数据从一个 channel(译者注:channel 中文常译做通道)传输到另一个 channel。java

1、通道的基本操做

FileInputStream fis = new FileInputStream("1.png");

FileOutputStream fos = new FileOutputStream("2.png");

//1. 获取通道

FileChannel inChannel = fis.getChannel();

FileChannel outChannel = fos.getChannel();

//2. 分配缓冲区

ByteBuffer buf = ByteBuffer.allocate(1024);

//3. 用通道传输数据

while (inChannel.read(buf) != -1) {

buf.flip();

outChannel.write(buf);

buf.clear();

}

2、直接缓冲区拷贝文件

FileChannel inChannel = FileChannel.open(Paths.get("1.png"), StandardOpenOption.READ);

FileChannel outChannel = FileChannel.open(Paths.get("3.png"),

StandardOpenOption.WRITE, StandardOpenOption.READ, StandardOpenOption.CREATE);

//内存映射文件,直接缓冲区

MappedByteBuffer inMappedBuf = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());

MappedByteBuffer outMappedBuf = outChannel.map(FileChannel.MapMode.READ_WRITE, 0, inChannel.size());

byte[] bytes = new byte[inMappedBuf.limit()];

inMappedBuf.get(bytes);

outMappedBuf.put(bytes);

3、transferFrom() 和 transferTo()

FileChannel 的 transferFrom() 方法能够将数据从源通道传输到 FileChannel 中(译者注:这个方法在 JDK 文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中)。下面是一个简单的例子:编程

RandomAccessFile inFile = new RandomAccessFile("fromFile.txt", "rw");

FileChannel inChannel = fromFile.getChannel();

RandomAccessFile outFile = new RandomAccessFile("toFile.txt", "rw");

FileChannel outChannel = toFile.getChannel();

long position = 0;

long count = inChannel.size();

outChannel.transferFrom(position, count, inChannel);

//inChannel.transferTo(position, count, outChannel);

方法的输入参数 position 表示从 position 处开始向目标文件写入数据,count 表示最多传输的字节数。若是源通道的剩余空间小于 count 个字节,则所传输的字节数要小于请求的字节数。

此外要注意,在 SoketChannel 的实现中,SocketChannel 只会传输此刻准备好的数据(可能不足 count 字节)。所以,SocketChannel 可能不会将请求的全部数据(count 个字节)所有传输到 FileChannel 中。并发

别再纠结高边低边了!用TI BQ76952设计两轮车BMS,手把手教你选对架构(附电路图) 本文深度解析基于TI BQ76952芯片的电动两轮车BMS设计策略,涵盖高边/低边驱动选择、四种基础架构的电流路径分析及选型决策矩阵。通过实战案例分享,帮助工程师优化BMS架构,提升系统可靠性和成本效益,特别适合电摩和共享单车应用场景。 阅读详情

相关推荐

大连理工大学中文情感词汇本体库(含情绪分析代码)

中文文本数据的情绪计算昨天如何对微博推文进行情绪分析(细粒度情感分析)介绍了英文的NRC情绪词典。虽然支持中文,但由于制作问题,导致并不完全适应中文场景。今天介绍大连理工大学中文情感...

大邓和他的Python 4万+

Java数据传输通道——IO流

Java中的IO流是一种计算机用语,主要是用于处理数据的传输。IO流是数据传输所需的通道,用于实现数据在程序间的有序传输,可以提高数据传输效率和稳定性也就是IO流用于读写文件中的数据比如游戏的进度需要备份,这就是写。在下次登录游戏时数据还在,这就是读IO流中以程序为参照物,程序向文件中读取数据,程序向文件中写入数据。

m0_74808313的博客 992

高通GAIA V3命令参考手册的研读学习(15):自定制命令的详细工作描述

里的示例一样,手机APP发出这个GetManuFacturer的命令发0x0000,那么耳机回复:0x8000, 同时在回复的playload部分,用最多15个字节的ACSII码来表达制造商信息(因此最多15个字母)。那么这个APP在通过GAIA协议控制这个耳机时,不仅可以通过前面讲过的vendor ID来识别,也可以更进一步通过这个命令来识别这个耳机,到底是不是本公司的。通过这个可变长度的playload,真的是可以传达极多的事先约定的信息,相当的灵活,真是不错!这个命令用来得到设备的制造商信息。

qq_37191547的博客 376

Java语言进阶:Channel(通道

Java语言进阶:Channel(通道) Channel概述 Channel(通道):Channel是一个接口,可以通过它读取和写入数据, 可以把它看做是IO中的流,不同的是:Channel是双向的, Channel对象既可以调用读取的方法, 也可以调用写出的方法 。 输入流: 读 输出流: 写 Channel: 读,写 Channel 的分类 在JavaNIO中的Channel主要有如下几种类型: FileChannel:从文件读取数据的 输入流和输出流 DatagramC

weixin_48351326的博客 1万+

Java NIO系列教程通道之间数据传输

Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。 transferFrom() FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中)。下面是一个简单的例子: RandomAccessFile fromFile = new Random

weixin_51393513的博客 190

JAVA中channel的transferTo方法限制

我们都知道nio中传送数据使用channel+buffer,大的数据可以使用allocateDirect申请直接内存传输以提高效率。而NIO包中还提供了更简便的方法,就是channel的transferTo和transferFrom方法。

yushuzuishuai的博客 1097

java nio文件上传_Java Nio 实现文件的传输 | 学步园

使用Java Nio实现文件的传输1、ServerSocket.javapackage ch2;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.net.InetSocketAddress;im...

weixin_33785828的博客 477

Java 入门指南:Java NIO —— Channel(通道

通道(Channel)是 `NIO`(New Input/Output)模型中的一个重要概念。通道代表着与底层 I/O 设备(如文件、网络套接字等)之间的连接,用于将数据传输到缓冲区或从缓冲区传输数据。 Channel 不与数据打交道,它只负责运输数据 通道NIO 中起到了桥梁作用,负责将数据从缓冲区传输到通道或者从通道传输到缓冲区。它是一个双向的数据传输通道

热带鱼的技术博客 2666

Java NIO详解

JAVA NIO 简介 NIO与IO的对比

代码充实生活的博客 1万+

Java NIO?看这一篇就够了!

点击上方“方志朋”,选择“置顶或者星标” 你的关注意义重大! ✎前言 现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。在前面2篇文章《什么是Zero-Copy?》和《NIO相关基础篇》中我们学习了NIO的相关理论知识,而在本篇中我们一起来学习一下Ja...

方志朋的专栏 13万+

Java NIO 系列教程

Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始)Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写...

灬一抹丶清风的博客 189

NIO--通道(Channel)

通道(Channel) 由 java.nio.channels 包定义 的。Channel 表示 IO 源与目标打开的连接。 Channel 类似于传统的“流”。只不过 Channel 本身不能直接访问数据,Channel 只能与 Buffer 进行交互。 通道可以用来读取和写入数据,通道类似于之前的输入/输出流,但是程序不会直接操作通道的,所有的内容都是先读到或写入到缓冲区中,再通过缓冲区中取得...

吴声子夜歌的博客 1983

java NIO()通道

一、通道(Channel):用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。  二、通道的主要实现类  java.nio.channels.Channel 接口:  |--FileChannel:用于读取、写入、映射和操作文件的通道。  |--SocketChannel:通过 UDP 读写网络中的数据通道。...

I can @ me 736

【转载】Java NIO 系列教程

Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始)Java NIO提供了与标准IO不同的IO工作方式。标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。

nukix 590

JAVA-NIO-通道

ServerSocketChannel:可以监听新进来的 TCP 连接,对每一个新 进来的连接都会创建一个SocketChannel。通过XxxChannell的静态方法open()打开并返回指定的XxxChannel。将 Channel 中的数据“分散”到 ByteBuffer[]将 ByteBuffer[] 中的数据“聚集”到 Channel。将 ByteBuffer 中的数据写入到 Channel。强制将所有对此通道的文件更新写入到存储设备中。返回此通道的文件的当前大小。返回此通道的文件位置。

存在,即合理 1016

JAVA NIO(三)通道(Channel)

1. 通道(Channel) 通道(Channel):由java.nio.Channels包定义的。Channel表示IO源与目标打开的连接。Channel类似于传统中的“流”,只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。 Channel在java NIO中负责缓冲区的数据传输。Channel本身不存在数据,因此需要配合缓冲区进行传输。 Java 为 C...

zjx2016的博客 1058

NIO 通道

通道通道(Channel):由 java.nio.channels 包定义的。Channel 表示 IO 源与目标打开的连接。 Channel 类似于传统的“流”。只不过 Channel 本身不能直接访问数据,Channel 只能与Buffer 进行交互。  Java 为 Channel 接口提供的最主要实现类如下: •FileChannel:用于读取、写入、映射和操作文件的通道。 •Da...

weixin_44130043的博客 227

[转]Java NIO 系列教程

Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如...

weixin_30848775的博客 89

一款拍照检查口算作业的微信小程序.zip(毕设&课设&实训&大作业&竞赛&项目)

项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途,网络商品/电子资源资料具可复制性不支持退款。质量优质,放心下载使用。

适用于 TI C2000 基于 C28x 的微控制器的 FreeRTOS 端口_C语言_代码_相关文件_下载

用于 TI C2000 基于 C28x 的微控制器 TMS320 系列的 FreeRTOS 端口。在 CCS v6.1.2 中编译。FreeRTOS v9.0.0。在以下 MCU 上开发和测试:TMS320F28377STMS320F28034TMS320F28069应与任何 TMS320 MCU 和任何其他版本的 FreeRTOS 一起使用。该项目包含 TMS320F28377S 和 TMS320F28034 的 FreeRTOS、端口和简单示例。示例需要为 MCU 安装 TI 的 controlSUITE,并且应调整项目设置以让编译器找到设备支持文件。

上一篇: php管理员管理权限设置,PHPWEB提示没有管理权限/误操作权限设置/恢复权限解决方法...
下一篇: jemter java请求后置,Jmeter后置处理器实现过程及方法应用
weixin_42512933
博客等级 码龄6年 33粉丝 106原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值