OkHttp——OKio(7)

OKio結構圖

從左半部分的圖我們可以看出OKio本質是對Java原生IO對一次封裝。
在這裏插入圖片描述
那麼,在OKio 的幫助下,完成一次讀寫操作又是怎樣的呢?

OKio讀取文本

下面是一段按行讀取文本的代碼,其首先構建一個Source,類似於Java的InputStream,然後構建一個BufferedSource,類似於Java的BufferedInputStream,最後就可以直接按行讀取文本了。

public void readLines(File file) throws IOException {
  // 1.構建 Source
  try (Source fileSource = Okio.source(file);
       // 2.構建 BufferedSource
       BufferedSource bufferedSource = Okio.buffer(fileSource)) {

    while (true) {
      // 3.按 utf8 的格式逐行讀取字符
      String line = bufferedSource.readUtf8Line();
      if (line == null) break;

      if (line.contains("square")) {
        System.out.println(line);
      }
    }

  }
}

OKio寫入文本

下面這段代碼演示瞭如何寫入一個文本到文件。其先構建一個Sink,類似於Java的OutputStream,再構建一個BufferedSink,類似於Java的 BufferedOutputStream。然後就可以寫入文本了。

public void writeEnv(File file) throws IOException {
 // 1.構建 Sink
  try (Sink fileSink = Okio.sink(file);
       // 2.構建 BufferedSink
       BufferedSink bufferedSink = Okio.buffer(fileSink)) {
   // 3.寫入文本
    for (Map.Entry<String, String> entry : System.getenv().entrySet()) {
      bufferedSink.writeUtf8(entry.getKey());
      bufferedSink.writeUtf8("=");
      bufferedSink.writeUtf8(entry.getValue());
      bufferedSink.writeUtf8("\n");
    }

  }
}

以上是一個文件的寫入和讀取操作,可以看到,整個過程其實是非常簡單的,不過這並不是重點,重點是寫入和讀取的方式和數據類型都十分的靈活。
比如,讀取數據可以很輕鬆的一行一行的讀取:


//一行一行的讀出數據
        try {
            BufferedSource bufferedSource=Okio.buffer(Okio.source(file));
            Log.e("TAG-string","--->"+bufferedSource.readUtf8Line());
            Log.e("TAG-string","--->"+bufferedSource.readUtf8Line());
            Log.e("TAG-string","--->"+bufferedSource.readUtf8Line());
            bufferedSource.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

再比如,你可以直接讀寫Java數據類型等等,可以說,OKio非常優雅的滿足了Java IO的絕大部分需求。卻有沒有Java原生IO的繁瑣。

總結

從下圖可以看出,實際上Sink和Source是OKio中的最基本的接口,大概相當於OutputStream和InputStream在原生接口中的地位。

1.這也是OKio中非常重要對特性,它不用區分字符流或者字節流,也不用記住各種不同的輸入/輸出流,統統只有一個輸入流Source和一個輸出流Sink。
2.而且它不僅支持文件讀寫,也支持Socket通信的讀寫。OKHttp底層對socket通信的讀寫就是通過它實現的。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章