目錄:andorid jar/庫原始碼決議
Okio:
作用:
說白了,就是一個IO庫,基于java原生io,來進行操作,內部做了優化,簡潔,高效,所以受到了一部分人的喜歡和使用
栗子:
讀寫檔案,
private void ReadFile() { try { InputStream in = new FileInputStream(new File("/sdcard/a.txt")); // new ByteArrayInputStream(("adasfdsaf").getBytes()); //2.緩沖源 Source source = Okio.source(in); //3.buffer Buffer sink = new Buffer(); source.read(sink, in.read()); //4.將資料讀入buffer System.out.print(sink.readUtf8()); }catch (Exception e){ System.out.print("error " + e.getMessage()); e.printStackTrace(); } } private void WriteFile(){ BufferedSink bSink = null; try { boolean isCreate = false; File file = new File("/sdcard/a.txt"); if (!file.exists()) { isCreate = file.createNewFile(); } else { isCreate = true; } //寫入操作 if (isCreate) { Sink sink = Okio.sink(file); bSink = Okio.buffer(sink); bSink.writeUtf8("1"); bSink.writeUtf8("\n"); bSink.writeUtf8("this is new file!"); bSink.writeUtf8("\n"); bSink.writeString("我是每二條", Charset.forName("utf-8")); bSink.flush(); } System.out.print("success"); }catch (Exception e){ e.printStackTrace(); System.out.print("error " + e.getMessage()); }finally { try { if (null != bSink) { bSink.close(); } }catch (IOException e){ e.printStackTrace(); } } }
原始碼解讀:
File file = new File("/sdcard/a.txt"); Sink sink = Okio.sink(file);
1、定義檔案,
2、傳入檔案,sink內部,創建一個檔案寫入流 new FileOutputStream(file)的
3、傳遞流物件給Okio的sink方法,回傳一個Sink 的介面的匿名物件,物件中提供的方法,可以訪問到傳入的流,對流進行操作,(write,flush,close)
BufferedSink bSink = Okio.buffer(sink);
bSink.writeUtf8("testtest");
1、構造一個 RealBufferedSink 物件,并傳入介面Sink的介面物件,
2、呼叫 RealBufferedSink 物件的,write方法,寫資料,
3、在RealBufferedSink物件內部,維護有一個 okio.Buffer 物件,寫入方法,首先寫入Buffer內部,然后呼叫 sink的write方法進行寫入到流中,
4、這里的okio.Buffer,用于高效復制的時候使用,
InputStream in = new FileInputStream(new File("/sdcard/a.txt"));
//2.緩沖源 Source source = Okio.source(in); //3.buffer Buffer sink = new Buffer(); source.read(sink, in.read()); //4.將資料讀入buffer System.out.print(sink.readUtf8());
1、傳入檔案流,回傳一個 Source介面物件,介面方法中使用了 傳入的流進行操作,(read,close)
2、構造一個Buffer物件,用于對Source介面物件,進行操作,Buffer中包含更多方法,
3、呼叫 source的read方法,先創建一個資料段(Segment),然后從流中讀取資料,寫入到資料段中,
4、readUtf8,從資料段中讀取資料,這里涉及到了一個判斷,(根據當前資料讀取位置和需要讀取的資料的長度,進行判定,如果當前資料段已經讀完,就需要釋放下一個資料段,供下次讀取,)
原始碼:https://github.com/square/okio
引入:
implementation 'com.squareup.okio:okio:1.9.0'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/7440.html
標籤:Android
