【原创】java NIO FileChannel 学习笔记 新建一个FileChannel
首先使用FileChannel 的open方法获取一个FileChannel对象。下面这段代码是FileChannel中open方法的代码。
public static FileChannel open(Path path,
Set<? extends OpenOption> options,
FileAttribute<?>... attrs)
throws IOException
{
FileSystemProvider provider = path.getFileSystem().provider();
return provider.newFileChannel(path, options, attrs);
}
private static final FileAttribute<?>[] NO_ATTRIBUTES = new FileAttribute[0];
public static FileChannel open(Path path, OpenOption... options)
throws IOException
{
Set<OpenOption> set = new HashSet<OpenOption>(options.length);
Collections.addAll(set, options);
return open(path, set, NO_ATTRIBUTES);
}
然后对代码进行介绍(其实就是翻译了源代码的注释而已)。首先介绍参数options,OpenOption以StandardOpenOption为例进行介绍
public enum StandardOpenOption implements OpenOption
该枚举(StandardOpenOption)包括READ、 WRITE、 APPEND、 CREATE 、CREATE_NEW、 DELETE_ON_CLOSE、TRUNCATE_EXISTING还有SYNC DSYNC
区别在于SYNC除了会将跟新的文件内容同步到存储设备上之外,还会同步更新文件的元数据。
InputStream 或者OutputSteam获取Channel的get方法
一下以FileOutputStream为例:
public FileChannel getChannel() {
synchronized (this) {
if (channel == null) {
channel = FileChannelImpl.open(fd, path, false, true, append, this);
}
return channel;
}
}
代码分析 fd是FileDescriptor,在FileOutputStream中有 private FileChannel channel;
最新文章
- 第三方提权之serv-u提权
- Git 工作流程
- RHEL7管道与重定向
- 学习总结 HTML简单应用
- HITAG 2 125kHz RFID IC Read-Write 256 bits
- UIImagePickerController Class 概述
- 乐1/MACBOOK/ N1 Type-C接口新体验
- Sqlserver2005手动备份远程数据库到本地数据库方法
- Nagios监控生产环境redis群集服务战
- centos 日常操作指令
- 实现 js 数据类型的判断函数type
- ionic3 创建项目至apk打包全过程教程
- 使用Jupyter Notebook编写技术文档
- IT资源关东煮第一期【来源于网络】
- 基于Quartz.NET 实现可中断的任务(转)
- ORACLE基本操作备忘
- SQLite中7(8)形参的query语句的用法
- HTML中css和js链接中的版本号
- 【剑指offer】判断一个序列是否是二叉搜索树的后序遍历,C++实现
- 【循环控制器】-(针对中间部分要循环的场景,相当于loadrunner的action部分)