FileDescriptor这个类有什么作用?

解决方案 »

  1.   

    看看这个
    http://doc.javanb.com/javasdk-docs-1-5-0-api-cn/java/io/FileDescriptor.html
      

  2.   

    java.io 
    类 FileDescriptor
    java.lang.Object
      java.io.FileDescriptor--------------------------------------------------------------------------------public final class FileDescriptorextends Object文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的 FileInputStream 或 FileOutputStream。 应用程序不应创建自己的文件描述符。 从以下版本开始: 
    JDK1.0 
    另请参见:
    FileInputStream, FileOutputStream
      

  3.   

    别粘了,各位老大,俺不是不会用Google,真服了。就没有你们自己的解释吗。
      

  4.   

    这个除非你使用过JNI,否则只是看文档你是不会明白是啥的,我来告诉你:是建立好链接之后的socket句柄
      

  5.   

    FileDescriptor是用来屏蔽不同平台输出流的差异用的,比如你写一个程序System.out.print("123");
    如果是直接在cmd窗口下java命令运行,则“123”打印在cmd窗口里
    如果你是用Eclipse,则“123”打印在图形化界面里
    如果是applet,则打印在j2se platform的小程序窗口里
    难道你不疑惑是真么造成的这种差异,我想就是和FileDescriptor中的in,out,err流的位置定义有关
      

  6.   

    我个人的一点理解:指定文件名字创建流是一种常见和主要的方式。但是,在某些情况下,用户不知道具体文件路径,只知道系统提供的一个“文件描述”。FD 的概念应该是从POSIX 来的。因此,用FD创建文件读写流只是提供了针对这种特殊情况的一个选择。不要期望着在你用文件名字创建的流里面 get 出 FileDescriptor 乐,(如果调用了,肯定返回空)毫无意义。而特殊情况其实非常少,javadoc 说得很明确:用户不能自己创建这个类的对象,只能使用定义好的FileDescriptor.err, in 或 out。 但即使这三个定义好的FD, 用户也可以不必使用,因为,System.err, in 和 out 可以替代他们。因此,不必对 java.io.FileDescriptor 过多纠缠。 
      

  7.   

    File Descriptor 应该是在 UNIX 系统里的一个提法。在 Window 系统里,称为 file handle。是指代文件的一种抽象表示法。
      

  8.   

    更正一下:通过验证,这个论断是错的:不要期望着在你用文件名字创建的流里面 get 出 FileDescriptor 乐,(如果调用了,肯定返回空)毫无意义。似乎系统为每个创建的文件流创建了一个对应的 FD 对象,可以用 get 方法 获取。 import java.io.*;public class TestFileDescriptor
    {
    public static void main(String[]args)
    {
    try{
    FileInputStream fi1 = new FileInputStream("TestFileDescriptor.java");
    FileInputStream fi2 = new FileInputStream("TestFileDescriptor.java");
    FileDescriptor fd1 = fi1.getFD();
    FileDescriptor fd2 = fi2.getFD();
    System.out.println("got " + fd1);
    System.out.println("got " + fd2);
    if (fd1!=null)
     System.out.println("valid " + fd1.valid());
      if (fd2!=null)
     System.out.println("valid " + fd2.valid());
    }catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    }结果是,针对用一个文件的两个输入六,系统创建了两个不同的FD。 
      

  9.   

    就是对于系统平台 file descriptor 的封装,操作系统的 file descriptor 只有三个取值 0(stdin)、1(stdout)、2(stdout)Java 中的 System.out, System.err, System.in 就是通过这个来获得操作系统对应的句柄。
      

  10.   

    如果你对Linux系统孰的话, 那么Linux里的各种设备“device”就是FileDescriptor了, 用这个类代表具体的硬件体现