当前位置: 首页 > news >正文

Channel是什么?FileChannel类的常用方法

Channel 是一个接口对象,它类似于传统的流对象,但与传统的流对象又有些不同,具体表现如下:

• Channel可以异步地执行I/O读写操作。

• Channel的读写操作是双向的,既可以从 Channel中读取数据,又可以写数据到Channel,而流的读写操作通常都是单向的。

• Channel可以直接将指定文件的部分或者全部直接映射成 Buffer。

• Channel只能与Buffer进行交互,程序不能直接读写Channel中的数据。

要使用 Channel,就需要使用它的实现类。在 java.nio.channels 包中,提供了很多Channel接口的实现类,包括 DatagramChannel、FileChannel、Pipe.SinkChannel、Pipe.SourceChannel,ServerSocketChannel,SocketChannel等。其中 DatagramChannel用于支持UDP网络通信,FileChannel 用于从文件中读写数据,Pipe.SinkChannel和 PipeSourceChannel用于支持线程之间的通信,ServerSocketChannel和SocketChannel用于支持TCP网络通信。这里将主要讲解 FileChannel的使用。

Channel对象并不是通过构造方法来创建的,而是通过传统I/O的getChannel()方法来获取对应的Channel。不同的流所获取的 Channel 是不同的,例如 FleInputStream和FileOutputStream获取的是 FileChannel,同时还可以使用RandomAccessFile 获取该对象而 PipedInputStream 和 PipedOutputStream 所获得的是 Pipe. SinkChannel 和 PipeSourceChannel。

FileChannel类可以实现常用的读写操作,在类中提供了很多专门用于操作文件的方注 其常用方法如表所示。

在这里插入图片描述

了解了FileChannel类的常用方法及其功能后,下面通过一个文件拷贝的案例,来演示FileChannel的使用,如下所示。

import java .1 o.*;
importjava.nio.channels.*;
public class Example19 {public static void main(String[] args) throws Exception {//创建RandomAccessFile对象,指定源文件RandomAccessFile infile = new RandomAccessFile("source/src.jpg", "rw")//获取读取源文件 Filehannel 通道FileChannel inChannel = infile.getChannel();//创建RandomAccessFile对象,指定目标文件RandomAccessFile outfile = new RandomAccessFile("target/dest.jpg", "rw");//获取复制目标文件 Filechannel通道FileChanneloutChannel = outfile.getChannel();//使用transferTo(方法进行整体复制long transferTo = inChannel.transferTo(0, inChannel.size() outChannel);if (transferTo > 0) {System.out.printIn("复制成功!");}//关闭资源infile.close();inChannel.close();outfile.close();outChannel.close();}
}
http://www.lryc.cn/news/136628.html

相关文章:

  • Python爬虫——scrapy_读书网数据入库和链接跟进
  • 前端常用linux命令
  • 制作高质量SVG的最佳工具,这些编辑软件你需要知道!
  • 四、MySQL性能优化
  • Oracle Database12c数据库官网下载和安装教程
  • spring依赖注入详解(下)
  • python的dataframe常用处理方法
  • k8s 自身原理之高可用
  • 游乐场vr设备虚拟游乐园vr项目沉浸体验馆
  • window10安装并使用oracle
  • [Mac软件]AutoCAD 2024 for Mac(cad2024) v2024.3.61.182中文版支持M1/M2/intel
  • Oracle 主从库目录不一致(异路径)的n种处理方案及效果
  • 创建型(一) - 简单工厂模式、工厂方法模式和抽象工厂模式
  • LeetCode3.无重复字符的最长子串
  • 鲁图中大许少辉博士八一新书《乡村振兴战略下传统村落文化旅游设计》山东省图书馆典藏
  • 如何发布自己的小程序
  • 【微服务】spring 条件注解从使用到源码分析详解
  • 客户案例:高性能、大规模、高可靠的AIGC承载网络
  • Flutter性能揭秘之RepaintBoundary
  • 29.Netty源码之服务端启动:创建EventLoopSelector流程
  • Kotllin实现ArrayList的基本功能
  • C++的初步介绍,以及C++与C的区别
  • JDK 核心jar之 rt.jar
  • el-form表单验证:只在点击保存时校验(包含select、checkbox、radio)
  • Golang基本语法(上)
  • jenkins使用
  • 多线程基础篇(包教包会)
  • Android/Java中,各种数据类型之间的互相转换,给出各种实例,附上中文注释
  • 机器学习知识点总结:什么是EM(最大期望值算法)
  • 漏洞挖掘和安全审计的技巧与策略