gpt4 book ai didi

java - 如何在 Java 11 中获取 POSIX 文件描述符?

转载 作者:行者123 更新时间:2023-11-30 10:05:00 27 4
gpt4 key购买 nike

我有方法,它使用 Java 8sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess().get(FileDescriptor) 来获取真正的 POSIX 文件描述符。在 Java 9(及更高版本) 中,SharedSecrets 被迁移到 jdk.internal.misc

如何在 Java 11 中获取 POSIX 文件描述符?

private int getFileDescriptor() throws IOException {
final int fd = SharedSecrets.getJavaIOFileDescriptorAccess().get(getFD());
if(fd < 1)
throw new IOException("failed to get POSIX file descriptor!");

return fd;
}

提前致谢!

最佳答案

这仅在紧急情况下使用(或者直到您找到不同的方式,因为它不受支持),因为它会执行 API 不希望做的事情并且不受支持。买者自负。

package sandbox;

import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Field;

public class GetFileHandle {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("somedata.txt")) {
FileDescriptor fd = fis.getFD();

Field field = fd.getClass().getDeclaredField("fd");
field.setAccessible(true);
Object fdId = field.get(fd);
field.setAccessible(false);

field = fd.getClass().getDeclaredField("handle");
field.setAccessible(true);
Object handle = field.get(fd);
field.setAccessible(false);

// One of these will be -1 (depends on OS)
// Windows uses handle, non-windows uses fd
System.out.println("fid.handle="+handle+" fid.fd"+fdId);
} catch (IOException | NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
}

关于java - 如何在 Java 11 中获取 POSIX 文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512615/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com