okio简单使用

2020-03-05  本文已影响0人  QM
try{
  File file = new File(getApplicationContext().getFilesDir().getPath().toString() +"/file.text");
  if(!file.exists()) {
    file.createNewFile();
  }
  //写
  BufferedSink sink = Okio.buffer(Okio.sink(file));
  sink.writeUtf8("hello ,OKIO");
  sink.flush();
  sink.close();

  //读
  BufferedSource source = Okio.buffer(Okio.source(file));
  Log.e(TAG,"OKIO: "+ source.readUtf8());
  source.close();

}catch(Exception e) {
   e.printStackTrace();
}

ByteString不仅是不可变的,同时在内部有两个filed,分别是byte数据,以及String的数据,这样能够让这个类在Byte和String转换上基本没有开销,同样的也需要保存两份引用,这是明显的空间换时间的方式,为了性能Okio做了很多的事情。

1)快,Okio采取了空间换时间的方式比如Segment(双向循环链表)和ByteString之类的存在来让IO操作尽可能不成为整个系统的瓶颈,虽然采取这种方式但是在内存上也是极致的优化,使用的片段共享以及整体的读写共享来加快大字节数组的读写,
2) 稳定,Okio提供了超时机制,不仅在IO操作上加上超时的判定,包括close,flush之类的方法中都有超时机制,这让上层不会错过一个可能导致系统崩溃的超时异常,
3)方便,Sink,Source两个包装了写和读,区别于传统的IO各种不同的输入输出流,这里只有一种而且支持socket,十分的方便。当然Okio还有很多其他的好处,易于扩展,代码量小易于阅读等。

参考
https://www.jianshu.com/p/f033a64539a1
https://www.jianshu.com/p/cbbe67474581

上一篇 下一篇

猜你喜欢

热点阅读