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详解
其实没什么详解的,并没有找到相关的资料。大抵是和前两种差不多,然后可以在打印流中提一下错误流
