Este constructor es público porque se usa fuera de java.io
.
clases usando new FileDescriptor()
en x86 JRE 7u4 Linux:
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
hay un método sun.misc.SharedSecrets
que permite que el programador para cambiar el estado de un FileDescriptor
a una válida (este fragmento encontrado en 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;
}
}
);
}
Esto significa que cualquier código que se puede acceder SharedSecrets
(es decir, el propio JRE) puede también crear su propio válida FileDescriptor
, y por lo tanto se debe permitir el acceso a FileDescriptor()
. Sin embargo, no hay forma de restringir el acceso de un constructor a solo clases JRE, por lo que es público.
Está preguntando a las personas equivocadas en el lugar equivocado. Obtendrá mucha opinión y conjeturas, al menos hasta que la pregunta se cierre como no constructiva, pero las únicas personas que realmente saben es poco probable que se encuentren aquí. – EJP
@ s106mo No estoy de acuerdo en que sea un error, y no estoy de acuerdo con el OP en que no tiene ningún propósito: eso es simplemente la mera pregunta. Es posible que hayan estado planeando, por ejemplo, Java.net.Socket para usarlo. No lo sabemos – EJP
@ s106mo * por error * no debería ser una respuesta satisfactoria porque no es correcta. Hay una razón, mira mi respuesta. – Jeffrey