【问题标题】:File copy-on-write in Java?Java 中的文件写时复制?
【发布时间】:2022-12-07 09:32:25
【问题描述】:

我正在使用 brtfs,我希望我的 Java 程序以写时复制的方式复制一组大文件。

换句话说,在某个希望存在并且有人听说过的库中,cp --reflink=auto 的等价物是什么,所以他们可以告诉我? :-)

【问题讨论】:

    标签: java linux copy-on-write


    【解决方案1】:

    据我所知,没有特定于 Java 的 API,因为这是一个相当特定的、依赖于操作系统和文件系统的特性。但是,在可以发出 ioctls 的库的帮助下(例如 this one,我与它没有任何关系并通过谷歌搜索找到),您可以发出 ficlonerange ioctl

    要调用它,您需要将一个结构放在一起:

               struct file_clone_range {
                   __s64 src_fd;
                   __u64 src_offset;
                   __u64 src_length;
                   __u64 dest_offset;
               };
    

    这在 Java 中有点迂回,但作为示例,您应该能够使用链接库按如下方式执行此操作:

    1. allocate a direct buffer,
    2. 填充其参数(注意正确处理机器字节顺序)
    3. get a pointer with Native.getDirectBufferPointer
    4. 使用 this 调用 ioctl。

      如果这看起来太脆弱,请考虑编写调用 ioctl 并具有更方便的 API 的 C 或 C++ 库,然后通过 JNI 调用它。

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2016-12-29
      相关资源
      最近更新 更多