IO第九回:FileDescriptor
IO第九回:FileDescriptor
标签: IO流
什么是FileDescriptor
public final class FileDescriptor extends Object
FileDescriptor是文件描述符类。
用FileDescriptor的对象来表示打开文件,开放套接字或其他字节源等。也就是说我们可以简单地将FileDescriptor的对象看成一个文件。
但是,我们不能直接把FileDescriptor当成文件来进行操作;若需要通过FileDescriptor对该文件进行操作,则需要新创建FileDescriptor对应的FileOutputStream,再对文件进行操作。
因此,文件描述符的主要用途是创建一个FileInputStream或FileOutputStream,来包含它。
成员变量
-
static FileDescriptor err 标准错误流(屏幕)的描述符。 static FileDescriptor in 标准输入流(键盘)的描述符。 static FileDescriptor out 标准输出流(屏幕)的描述符。
构造方法
FileDescriptor public FileDescriptor() 构造(无效)FileDescriptor对象。 为什么说是无效的呢?我们看一下代码:
public /**/ FileDescriptor() { fd = -1; handle = -1; }
方法摘要
valid public boolean valid() 测试此文件描述符对象是否有效。true表示文件描述符对象有效,false表示无效
sync public void sync() throws SyncFailedException 强制所有系统缓冲区与底层设备同步。
静态变量详解
out详解
out是标准输出(屏幕)的描述符代表了标准输出(屏幕)。若我们要输出信息到屏幕上,即可通过out来进行操作。
但是我们看一下,在FileDescriptor类中,并没有什么方法来供我们操作。这是我们要注意API中的一句话:“文件描述符的主要用途是创建一个FileInputStream或FileOutputStream,来包含它。 ”
比如:
try { FileOutputStream fos = new FileOutputStream(FileDescriptor.out); fos.write(A); fos.close(); } catch (IOException e) { e.printStackTrace(); }
屏幕上输出字母’A’。
in详解
in与out原理类似,下面的代码实现System.in的功能
package charIO; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.IOException; /** * Created by japson on 8/25/2017. */ public class SystemIOE { public static void testin() { FileInputStream fis = null; try { FileDescriptor fd = FileDescriptor.in; fis = new FileInputStream(fd); byte[] b = new byte[10]; int len; while ((len = fis.read(b)) != -1) { String str = new String(b,0,len); System.out.print("fis.read() = " + str); } } catch (IOException e) { e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { testin(); } }
error详解
其实没什么详解的,并没有找到相关的资料。大抵是和前两种差不多,然后可以在打印流中提一下错误流