纯净、友善、技术工作交流Q群 473930845 欢迎二年工作经验以上的朋友一起学习探讨
转载请标明出处
概述
Okio
Okio是一个新库,补充java.io和java.nio使它更容易访问,存储和处理您的数据。
ByteStrings和Buffers
Okio是围绕两种类型,将大量的功能包装成一个简单的API:
ByteStrings: 是一个不可变的字节序列。对于字符数据,String是基础。ByteString 是String 失去多年的兄弟。使用ByteString很容易把二进制数据转成一个值。这个类的设计是符合人体工程学的: 它自己知道如何用十六进制,Base64,UTF-8来编码和解码自己。
Buffters: 是一个可变的字节序列。就像ArrayList,你不必预先设置缓冲区的大小。你对buffters的读写就像一个队列:尾部插入数据,头部获取数据。不必管理队列里元素,边界和容量。
在内部,ByteString和Buffer做了些聪明的事情以节省CPU和内存。例如,把一个UFT-8的字符串 A 编码成 ByteString B,它会缓存该字符串A的引用,当你想把该字符串B 解码成A ,这时候什么工作都不需要做了。
Buffer 被实现成一个具有多个片段组成的 LinkedList ,当你想把缓存中的数据从一块儿转移到另一块,你不必再复制一份了,你只需要修改它的引用(对数据的控制权)即可。这种尤其对于多线程程序特别有帮助: 一个与网络交互的线程(子线程)可以与工作线程(主线程)轻松交换数据,而不再用复制或者举办个仪式来实现。
Sources 和 Sinks
java.io 设计的一个优雅部分是,如何让数据流stream可以分层加密和压缩的转换。Okio有自己的stream类型 Sources和Sinks ,工作与InputStream 和OutputStream一样,但也有一些关键点不同,如下:
超时:这些流提供对基础I / O机制的超时的访问。与java.io 流不同,read()和write()都满足超时控制操作
易于实施:Source声明三种方法:read(),close(),和timeout()。没有危险的方法类似available()或单字节读取,使得程序编写不好导致的正确性和性能意外。
字节流和字符流之间没有人为区别。所有的数据,无论是int ,short还是string读取和写入它全部作为字节。没有多余的InputStreamReader!(InputStreamReader是字节到字符流的转换桥梁)
容易测试。Buffer类同时实现了BufferedSource和BufferedSink 接口让你的测试代码简单明了。
Sources、Sinks与InputStream、OutputStream 可以互相操作。你可以把Sources等价于InputStream,把Sinks等价于OutputStream,他们直接非常相像。
可信度
Okio是OkHttp的基础组件。OkHttp是Android上(4.4之后)实现了HTTP+SPDY协议的客户端。Okio使用良好并预备解决新的问题。
示例:png解码器
Demo演示解码文件夹中的png文件
Okio实例代码下载
compile'com.squareup.okio:okio:1.11.0'
混淆
如果你的应用启用混淆,不要忘记混淆规则文件上加
-dontwarn okio.**