<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Java IO/NIO.2文件系統

    Java FileSystem

    Java IO 文件系統

    Java抽象出了一個叫做文件系統的對象:java.io.FileSystem,不同的操作系統有不一樣的文件系統,例如WindowsUnix就是兩種不一樣的文件系統: java.io.UnixFileSystemjava.io.WinNTFileSystem

    image-20191203163038813

    java.io.FileSystem是一個抽象類,它抽象了對文件的操作,不同操作系統版本的JDK會實現其抽象的方法從而也就實現了跨平臺的文件的訪問操作。

    image-20191203164105238

    示例中的java.io.UnixFileSystem最終會通過JNI調用native方法來實現對文件的操作:

    image-20191203164635637

    由此我們可以得出Java只不過是實現了對文件操作的封裝而已,最終讀寫文件的實現都是通過調用native方法實現的。

    不過需要特別注意一下幾點:

    1. 并不是所有的文件操作都在java.io.FileSystem中定義,文件的讀取最終調用的是java.io.FileInputStream#read0、readBytesjava.io.RandomAccessFile#read0、readBytes,而寫文件調用的是java.io.FileOutputStream#writeBytesjava.io.RandomAccessFile#write0
    2. Java有兩類文件系統API!一個是基于阻塞模式的IO的文件系統,另一是JDK7+基于NIO.2的文件系統。

    Java NIO.2 文件系統

    Java 7提出了一個基于NIO的文件系統,這個NIO文件系統和阻塞IO文件系統兩者是完全獨立的。java.nio.file.spi.FileSystemProvider對文件的封裝和java.io.FileSystem同理。

    image-20191203181206243

    NIO的文件操作在不同的系統的最終實現類也是不一樣的,比如Mac的實現類是: sun.nio.fs.UnixNativeDispatcher,而Windows的實現類是sun.nio.fs.WindowsNativeDispatcher

    合理的利用NIO文件系統這一特性我們可以繞過某些只是防御了java.io.FileSystemWAF/RASP

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类