我是一個CPU:這個世界慢敌土!死!了运翼! 返干,可以感受到CPU,內存和硬盤之間的速度比較血淌。
文件的本質
OS(操作系統(tǒng))的目的就是可以讓上層程序可以通過一種統(tǒng)一的方式去拿到無論什么磁盤里的文件(即一段字節(jié)流)矩欠。
一切文件的本質:
- 一段字節(jié)流
- 文本文件(txt,代碼,html等)
- 二進制文件
- 每個程序負責解釋文件中的字節(jié)流
即文件本身就是一段字節(jié)流悠夯,不管是圖片癌淮、音頻還是文本等等,文件的展示形式取決于用什么軟件打開沦补,例如播放器可以解析mp3文件等乳蓄,但是本質上這個文件就是一段字節(jié)流。
文件和IO
程序和文件之間的雙向流讀取和輸出夕膀,和網絡連接時虚倒,從機器到遠程主機上的雙向的讀取輸出流十分相似,所以Java針對這種流抽象出了InputStream和OutputStream店诗。
InputStream/OutputStream
- 抽象的輸入/輸出流裹刮,無論是:
- 從文件中讀取字節(jié)流
- 從網絡中讀取字節(jié)流
- 從任何地方讀取字節(jié)流
輸入和輸出都是以程序為基準來判定的
對于文件讀取音榜,永遠建議使用絕對路徑庞瘸。
Java中的File類
- File并不代表一個“文件”,它只代表一個“路徑”
- 抽象的“文件”路徑: 可以指文件也可以指文件夾
- File的常見方法
isFile()
isDirectory()
exists()
getAbsolutePath()
等等 - 絕對路徑和相對路徑
相對路徑相對的是JVM當前的工作目錄赠叼,永遠建議使用絕對路徑擦囊。 - 讀寫文件
NIO
- NIO是Java7之后引入的,解釋為:1.new IO 2.Non-blocking IO非阻塞的IO
- NIO中的Path其實就是舊版的File嘴办,可以通過toFile方法進行轉換
- NIO的Files工具類瞬场,提供了walkFileTree等方法
NIO解決的問題是,對于舊版的流式讀取涧郊,因為其是通過字節(jié)流的形式傳輸的贯被,一個字節(jié)一個字節(jié)的進行讀寫,沒法插隊等等妆艘,速度較慢彤灶。NIO改為了按塊讀寫,中間塊和塊是也是沒有順序的批旺,是比舊版IO快的幌陕。
IO太慢的解決方法
使用BufferedReader/BufferedWriter