Java成神之路(九)IO類

2021-09-13 19:30:10 字數 1797 閱讀 1674

io類

字元流、位元組流、輸入流、輸出流

相對於程式而言

位元組流:輸入流、輸出流的傳輸方式,基本單位是位元組,位元組的資料一般需要設定編碼。

位元組輸入流:

inputstream(抽象基類,定義了read(byte b), read(byte b,int off ,int len),close()等類)、fileinputstream(操作檔案的輸入流)、bufferedinputstream(filterinputstream的子類,帶有緩衝的輸入流,效率高一點,封裝流,引數是流)。

位元組輸出流:outputstream(抽象基類,定義了wirte(byte b), wirte (byte b,int off ,int len),close()等類)、fileputstream(操作檔案的輸出流)、bufferedoutputstream(filteroutputstream的子類,帶有緩衝的輸入流,效率高一點,封裝流,引數是流)

字元流:輸入流、輸出流的傳輸方式,基本單位是字元。

字元輸入流:

reader(基類、read()讀取單個字元,返回乙個int,需要轉換為char,到達流的末尾時,返回-1,read(char cbuf),close())、inputstreamreader(把inputstream中的位元組資料流根據編碼方式轉換為字元資料流,引數是流)、filereader(把fileinputstream中的位元組資料轉成根據字元編碼方式轉成字元資料流,引數是檔案物件)、bufferedreader(把字元輸入流進行封裝,實現了readline(),讀取文字行,以行結束符作為末尾,如果到達末尾,返回null,引數是流)

推薦使用:bufferedread in =new bufferedreader(new inputstreamreader(system.in))

字元輸出流:

wirter(抽象基類,實現wirter(char cbuf)輸出乙個字元陣列,wirter(int c)、wirter(string str)、close()、flush()重新整理輸出流)、outputstreamwirte(自動編碼,引數是流)、filewirte(同前乙個,引數是物件)、bufferedwirter(緩衝,引數是流)

同步、非同步、阻塞、非阻塞

同步:呼叫者,主動等待這個呼叫的結果,不做其他任務

非同步:呼叫者,所獲取的結果,是被呼叫者通知的。

阻塞:程式等待呼叫結果(訊息,返回值)時的狀態,未返回時,執行緒掛起,不執行。

非阻塞:不停止執行執行緒。

linux 中五種io模型

阻塞io模型(bio):

應該程式呼叫乙個io模型,程序一直阻塞,直到讀取完成。

非阻塞io模型(nio)

多次系統呼叫,並馬上返回結果,在資料拷貝的過程中,程序是阻塞。

io復用模型(iom)

使用select、epoll;對於乙個io埠,兩次呼叫,兩次返回,比阻塞io沒有多大的優勢,,但實現了同時對多個io埠進行監聽,阻塞。

訊號驅動模型(sio)

安裝訊號處理函式,程序繼續執行並不阻塞,當資料準備好,收到訊號,呼叫io操作函式處理資料。

非同步io模型(aio)

資料拷貝無需阻塞

比較:bio可以快速返回資料,但是效能較低。nio 第一階段不阻塞,但是不停的詢問。第二階段阻塞,延遲會增加但可以在等待任務完成的過程中處理其他事情。iom在select與poll呼叫後阻塞執行緒,可以同時阻塞多個事件,有資料可讀寫時就通知使用者程序,epoll不需要註冊事件,多用於伺服器監聽多個套接字。sio第一階段不阻塞,第二階段阻塞。aio全部不阻塞,由核心負責通知已經完成,讀寫在核心完成。效率高

netty基礎入門

非同步nio框架

Java成神之路(五)String類

string 類 字串string的不可變性 一旦建立,便具有不可變性,物件的引用與物件的區別,物件是記憶體的記憶體塊,物件的引用是4位元組的資料,存放指向物件的位址,string 的操作,會生成新的物件,改變了引用,沒有改變物件本身。其實用反射可以改變其value string,不可改變的原因與好...

Java成神之路(三) 基本資料型別

一 基本資料型別 8種基本型別 整型 浮點型 布林型 字元型 整型 byte 8位,有符號,二進位制補碼,預設為0,27 27 1 short 16位,有符號,二進位制補碼,預設為0,215 215 1 int 32位,有符號,二進位制補碼,預設為0,231 231 1 long 64位,有符號,二...

C 成神之路 3 開發程式計畫

1 這裡討論下關於開發程式的步驟,一點初學者的感悟。1 初始化 初始化負責建立程式的執行環境,該步驟發生在使用者看到螢幕上的任何內容之前。2 輸入 驗證輸入的有效性是程式編譯的良好習慣。3 處理 接受程式輸入並以某種方式處理輸入的步驟。用不同的演算法去獲得程式中的相同輸入,要始終保持開放的思想。4 ...