加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么java.io.FileDescriptor的构造函数是公共的?

发布时间:2020-12-14 19:20:20 所属栏目:Java 来源:网络整理
导读:适用于java.io.FileDescriptor.FileDescriptor()的JavaDoc说: Constructs an (invalid) FileDescriptor object. 如果构造函数没有用处,为什么它的访问级别没有被声明为包私有? 最佳答案 此构造函数是公共的,因为它在java.io之外使用. 在JRE 7u4 Linux x86

适用于java.io.FileDescriptor.FileDescriptor()的JavaDoc说:

Constructs an (invalid) FileDescriptor object.

如果构造函数没有用处,为什么它的访问级别没有被声明为包私有?

最佳答案
此构造函数是公共的,因为它在java.io之外使用.

在JRE 7u4 Linux x86中使用新FileDescriptor()的类:

java.io.FileInputStream
java.io.FileOutputStream
java.io.RandomAccessFile

java.lang.UNIXProcess
java.net.AbstractPlainDatagramSocketImpl
java.net.AbstractPlainSocketImpl
java.net.ServerSocket

sun.net.sdp.SdpSupport
sun.nio.ch.FileChannelImpl
sun.nio.ch.FileDispatcherImpl
sun.nio.ch.IOUtil
sun.nio.ch.PipeImpl
sun.nio.ch.SctpServerChannelImpl
sun.nio.ch.ServerSocketChannelImpl
sun.nio.ch.UnixAsynchronousServerSocketChannelImpl
sun.nio.fs.UnixChannelFactory

有一个sun.misc.SharedSecrets方法,允许程序员将FileDescriptor的状态更改为有效的(在java.io.FileDescriptor中找到此片段):

  static {
        sun.misc.SharedSecrets.setJavaIOFileDescriptorAccess(
            new sun.misc.JavaIOFileDescriptorAccess() {
                public void set(FileDescriptor obj,int fd) {
                    obj.fd = fd;
                }

                public int get(FileDescriptor obj) {
                    return obj.fd;
                }

                public void setHandle(FileDescriptor obj,long handle) {
                    obj.handle = handle;
                }

                public long getHandle(FileDescriptor obj) {
                    return obj.handle;
                }
            }
        );
    }

这意味着任何可以访问SharedSecrets的代码(I.E.JRE本身)也可以创建自己的有效FileDescriptor,因此应该允许访问FileDescriptor().但是,没有办法将构造函数的访问权限仅限于JRE类,因此它是公共的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读