黑龙江外贸网站制作,html表格编辑器,长春建设局网站,管理咨询师证书一、FileDescriptor 文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄#xff0c;该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的 FileInputStream 或 FileOutputStream。 二、静态标准文件描述…一、FileDescriptor 文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的 FileInputStream 或 FileOutputStream。 二、静态标准文件描述符
(1)标准文件描述符
字段摘要static FileDescriptorerr 标准错误流的句柄。static FileDescriptorin 标准输入流的句柄。static FileDescriptorout 标准输出流的句柄。
标准流的源码 public static final FileDescriptor in standardStream(0);
public static final FileDescriptor out standardStream(1);
public static final FileDescriptor err standardStream(2); private static FileDescriptor standardStream(int fd) {FileDescriptor desc new FileDescriptor();desc.handle set(fd);return desc;
}
private static native long set(int d); (2)out 的作用和原理
out是标准输出(屏幕)的描述符。通过创建out对应的OutputStream对象os然后通过os的write()等输出接口就可以将信息输出到屏幕上。 try {PrintWriter pw new PrintWriter(new FileOutputStream(FileDescriptor.out)); pw.print(你好);pw.flush();pw.close();
} catch (Exception e) {
} 输出结果你好
这与System.out.print()方法一样 三、文件流的FileDescriptor
(1)获取文件描述符Stream.getFD() try {// 打开文件获取文件描述符String fileName out.txt;FileOutputStream os new FileOutputStream(fileName);FileDescriptor fd os.getFD();System.out.println(file name: fileName);//写数据入文件byte[] data 你好.getBytes();os.write(data);System.out.println(data: data);// 刷新缓冲区,数据可能没有写入到磁盘 os.flush();// 阻塞直到数据缓冲区的数据全部写入磁盘,该方法返回后数据已经写入到磁盘System.out.println(阻塞直到数据缓冲区的数据全部写入磁盘);fd.sync();// 关闭流os.close();
} catch (IOException e) {e.printStackTrace();
} (2)同一个文件描述符 String fileNamefile.txt;
try { // 新建文件file.txt对应的FileOutputStream对象 FileOutputStream os1 new FileOutputStream(fileName); // 获取文件file.txt对应的FileDescriptor FileDescriptor fd os1.getFD(); // 根据FileDescriptor创建FileOutputStream对象 FileOutputStream os2 new FileOutputStream(fd); os1.write(a); // 通过os1向file.txt中写入a os2.write(b); // 通过os1向file.txt中写入b if (fd!null) System.out.printf(fd(%s) is %s\n,fd, fd.valid()); System.out.println(os1.getFD()os2.getFD()); //true os2.close(); os1.close(); } catch(IOException e) { e.printStackTrace();
} file.txt 中内容为ab (3)不同文件描述符 String fileNamefile.txt;
try { // 新建文件file.txt对应的FileOutputStream对象 FileOutputStream os1 new FileOutputStream(fileName); // 根据FileDescriptor创建FileOutputStream对象 FileOutputStream os2 new FileOutputStream(fileName); os1.write(a); // 通过out1向file.txt中写入a os2.write(b); // 通过out1向file.txt中写入bSystem.out.println(os1.getFD()os2.getFD()); //false os2.close(); os1.close();
} catch(IOException e) { e.printStackTrace();
} file.txt 中内容为b 最后FileInputStream 与FileOutputStream的执行结果类似。