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



我有方法,它使用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();
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新