群里有大佬说想让我写一篇NIO,一直也没写,但是和同事聊天也说对<em>Java</em>的IO不是很清晰,因此今天就写下<em>Java</em>的IO,先打个基础,下次写NIO,我们开始吧 一、IO底层是怎么回事? 操作系统就是管家,电脑的设备
2021-05-21 09:30:16
前言:
群裡有大佬說想讓我寫一篇NIO,一直也沒寫,但是和同事聊天也說對Java的IO不是很清晰,因此今天就寫下Java的IO,先打個基礎,下次寫NIO,我們開始吧
一、IO底層是怎麼回事?
作業系統就是管家,電腦的裝置就是資源,如果程序先要操作資源,必須要進行系統呼叫,有作業系統去處理,然後再返回給程序,這樣的代理模式是不是很常見?因此app 就是你寫的程式,資源就是硬碟或者其他的裝置,io就是進行的系統呼叫。
為了保證作業系統的穩定性和安全性,一個程序的地址空間劃分為 使用者空間(User space) 和 核心空間(Kernel space ) 。像我們平常運行的應用程式都是運行在使用者空間,只有核心空間才能進行系統態級別的資源有關的操作,比如如檔案管理、程序通訊、記憶體管理等等。也就是說,我們想要進行 IO 操作,一定是要依賴核心空間的能力。並且,使用者空間的程式不能直接訪問核心空間。當想要執行 IO 操作時,由於沒有執行這些操作的許可權,只能發起系統呼叫請求作業系統幫忙完成。因此,使用者程序想要執行 IO 操作的話,必須通過 系統呼叫 來間接訪問核心空間
二、梳理類的結構
java的io 實在太複雜了,往往新手很難掌握,因為只緣身在此山中,新手往往很難從全體去看到問題的本質,我和打鐵的朋友的聊天截圖能幫你解答一些。
類結構如下
在平常的讀寫檔案的時候可以先用基本流,然後看是否需要字元流,最後在用上帶buffer 的流。
IO流的設計思想就是裝飾器模式,一層一層的進行升級功能。
三、IO類大點兵
四、來波例項展示
1、訪問操作檔案(FileInputStream/FileReader ,FileOutputStream/FileWriter)
importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;/*** 拷貝檔案* @author 香菜*/publicclassCopyFileWithStream {publicstaticvoidmain(String[] args) {intb=0;StringinFilePath="D:\wechat\A.txt";StringoutFilePath="D:\wechat\B.txt";try (FileInputStreamin=newFileInputStream(inFilePath); FileOutputStreamout=newFileOutputStream(outFilePath)) {while ((b=in.read()) !=-1) {out.write(b);} } catch (IOExceptione) {e.printStackTrace(); }System.out.println("檔案複製完成"); }}
2、快取流的使用(BufferedInputStream/BufferedOutputStream,BufferedReader/BufferedWriter)
packageorg.pdool.iodoc;importjava.io.*;/*** 拷貝檔案** @author 香菜*/publicclassCopyFileWithBuffer {publicstaticvoidmain(String[] args) throwsException {StringinFilePath="D:\wechat\A.txt";StringoutFilePath="D:\wechat\B.txt";try (BufferedInputStreambis=newBufferedInputStream(newFileInputStream(inFilePath));BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream(outFilePath))) {byte[] b=newbyte[1024];intoff=0;while ((off=bis.read(b)) >0) {bos.write(b, 0, off); } } }}
3、獲取鍵盤輸入
importjava.util.Scanner;publicclassTestScanner {publicstaticvoidmain(String[] args) {Scannerscanner=newScanner(System.in);while (scanner.hasNextLine()){System.out.println(scanner.nextLine());} }}
讓我們看下源碼是啥情況:
總結:
而Reader/Writer則是用於操作字元,增加了字元編解碼等功能,適用於類似從檔案中讀取或者寫入文字資訊。本質上計算機操作的都是位元組,不管是網路通訊還是檔案讀取,Reader/Writer相當於構建了應用邏輯和原始資料之間的橋樑。Buffered等帶緩衝區的實現,可以避免頻繁的磁碟讀寫,進而提高IO處理效率。記住IO流的設計模式是裝飾器模式,對流進行功能升級。
相關文章
群里有大佬说想让我写一篇NIO,一直也没写,但是和同事聊天也说对<em>Java</em>的IO不是很清晰,因此今天就写下<em>Java</em>的IO,先打个基础,下次写NIO,我们开始吧 一、IO底层是怎么回事? 操作系统就是管家,电脑的设备
2021-05-21 09:30:16
IE <em>浏览器</em>(Internet Explorer)了 再见了,IE<em>浏览器</em>!据华尔街日报中文网报道,微软表示,其<em>浏览器</em>Internet Explorer(简称:IE)将基本淘汰,标志着又一款数字产品将退出历史。该报道指出,软件巨头微软周
2021-05-21 09:00:42
App Annie 消息,当地时间5月11日,SHEIN 成为美国 <em>Android</em> 上安装次数最多的购物应用,6天后在 iOS 上也登顶。截至5月17日,SHEIN 在全球54个国家 iOS 购物应用中排名第一,在13个国家 <em>Android</em> 设备中
2021-05-21 09:00:33
咱们也应应景,来个Object。插一句题外话,学习使人进步,学习使人快乐。如果还没有对象的话,小伙伴们不妨通过学习来充实自己,让自己早日月薪过万,迎娶白富美,嫁给高富帅,走上人生巅峰。好了,言归正传,我们回到<em>java</em>世界
2021-05-21 09:00:13
此次评测,外媒使用的PC配置为<em>Intel</em> i9 9900K/16GB内存/Windows 10 64-bit,此外他们采用了多款显卡来评测这款游戏,从而使得此次评测更具参考价值,这些显卡包括:Radeon RX580/RX Vega 64/GTX690/GTX980Ti/RTX 2080
2021-05-21 08:30:43
英敏特(M<em>intel</em>)消费分析师的一项调查则表明,40%的英国受访者则认为“现在我吃肉比以前少了”;在18-24岁的年轻人中,28%的受访者认为“到2025年,我的饮食可能会基本不吃肉”。 环保压力 - 温室气体排放 Beyon
2021-05-21 08:30:39