• 【原创】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;

  • 相关阅读:
    Django各个文件中常见的模块导入
    js模板(template.js)实现页面动态渲染
    Netty 源码 Channel(一)概述
    Netty 源码 NioEventLoop(三)执行流程
    Netty 源码(一)Netty 组件简介
    Netty 源码(二)NioEventLoop 之 Channel 注册
    Java 算法(一)贪心算法
    Netty Reator(三)Reactor 模型
    Netty Reator(二)Scalable IO in Java
    Reactor 模型(一)基本并发编程模型
  • 原文地址:https://www.cnblogs.com/earendil/p/5016008.html
Copyright © 2020-2023  润新知