- 文件读写
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();
}
-
OKIO sink 和source接口,Sink代表的输出流,Source代表的是输入流
image.png
-
OKIO sink 和source实现类
image.png
-
Okio这个库的优势,
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
网友评论