目錄:andorid jar/庫源碼解析 html
說白了,就是一個IO庫,基於java原生io。來進行操做,內部作了優化,簡潔,高效。因此受到了一部分人的喜歡和使用java
讀寫文件。git
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);
一、定義文件,github
二、傳入文件,sink內部,建立一個文件寫入流 new FileOutputStream(file)的優化
三、傳遞流對象給Okio的sink方法。返回一個Sink 的接口的匿名對象,對象中提供的方法,能夠訪問到傳入的流,對流進行操做。(write,flush,close)this
BufferedSink bSink = Okio.buffer(sink);
bSink.writeUtf8("testtest");
一、構造一個 RealBufferedSink 對象,並傳入接口Sink的接口對象。spa
二、調用 RealBufferedSink 對象的,write方法,寫數據。code
三、在RealBufferedSink對象內部,維護有一個 okio.Buffer 對象,寫入方法,首先寫入Buffer內部。而後調用 sink的write方法進行寫入到流中。htm
四、這裏的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());
一、傳入文件流,返回一個 Source接口對象,接口方法中使用了 傳入的流進行操做。(read,close)
二、構造一個Buffer對象。用於對Source接口對象,進行操做,Buffer中包含更多方法。
三、調用 source的read方法,先建立一個數據段(Segment),而後從流中讀取數據,寫入到數據段中。
四、readUtf8,從數據段中讀取數據,這裏涉及到了一個判斷,(根據當前數據讀取位置和須要讀取的數據的長度,進行斷定,若是當前數據段已經讀完,就須要釋放下一個數據段,供下次讀取。)
implementation 'com.squareup.okio:okio:1.9.0'