文件写时复制在Java?



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

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

据我所知,没有特定于java的API,因为这是一个相当特定的、依赖于操作系统和文件系统的特性。然而,在一个可以发出ioctl的库的帮助下(例如,这个库我没有隶属关系,是通过谷歌找到的),你可以发出ficlonerangeioctl。

要调用它,你需要组合一个结构体:
struct file_clone_range {
__s64 src_fd;
__u64 src_offset;
__u64 src_length;
__u64 dest_offset;
};

这在Java中有点迂回,但作为一个例子,您应该能够使用链接库执行以下操作:

  1. 分配一个直接缓冲区,
  2. 填充其参数(注意正确处理机器端序);你还需要打开fd。
  3. 获取Native.getDirectBufferPointer
  4. 指针
  5. 错误-如果ioctl失败或不支持,检查结果并采取适当的操作。

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

最新更新