目錄:andorid jar/庫源碼解析 Okio: 作用: 說白了,就是一個IO庫,基於java原生io。來進行操作,內部做了優化,簡潔,高效。所以受到了一部分人的喜歡和使用 慄子: 讀寫文件。 private void ReadFile() { try { InputStream in = ne ...
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'