FileDescriptor的作用
生活随笔
收集整理的這篇文章主要介紹了
FileDescriptor的作用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、FileDescriptor
? ? 文件描述符類的實例用作與基礎機器有關的某種結構的不透明句柄,該結構表示開放文件、開放套接字或者字節的另一個源或接收者。文件描述符的主要實際用途是創建一個包含該結構的 FileInputStream 或 FileOutputStream。?
?
| 二、靜態標準文件描述符 |
(1)標準文件描述符
| static?FileDescriptor | err ??????????標準錯誤流的句柄。 |
| static?FileDescriptor | in ??????????標準輸入流的句柄。 |
| static?FileDescriptor | out ??????????標準輸出流的句柄。 |
標準流的源碼
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()等輸出接口就可以將信息輸出到屏幕上。
?輸出結果:你好
這與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 fileName="file.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 fileName="file.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中寫入'b' System.out.println(os1.getFD()==os2.getFD()); //false os2.close(); os1.close(); } catch(IOException e) { e.printStackTrace(); }file.txt 中內容為b
?
最后,FileInputStream 與FileOutputStream的執行結果類似。
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的FileDescriptor的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 世界最强笔记本电脑?
- 下一篇: 华为matebookd15使用指南?