热门搜索 :
考研考公
您的当前位置:首页正文

Okio 官方文档(译)

来源:东饰资讯网

纯净、友善、技术工作交流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.**

Top