Okio库补充io和nio的不足

OKIO:Okio库是一个由square公司开发的,它补充了Java.io和java.nio的不足,以便能够更加方便,快速的访问、存储和处理你的数据。而OkHttp的底层也使用该库作为支持。而在开发中,使用该库可以大大给你带来方便。:

使用:

compile 'com.squareup.okio:okio:1.7.0'

Okio的简单使用,无非下面几个步骤:

a.构建缓冲池、缓冲源对象

b.读、写

c.关闭缓冲对象;

简单的举几个例子:

1.读写:

public void readWriteFile(View view) {

try{

File file =newFile(getApplicationContext().getFilesDir().getPath().toString() +"/readWriteFile");

if(!file.exists()) {

file.createNewFile();

}

BufferedSink sink = Okio.buffer(Okio.sink(file));

sink.writeUtf8("hello ,OKIO file");

sink.close();

BufferedSource source = Okio.buffer(Okio.source(file));

Log.e(TAG,"readWriteFile: "+ source.readUtf8());

source.close();

}catch(Exception e) {

e.printStackTrace();

}

}

2.追写文件:

public void appendFile(View view) {

try{

File file =newFile(getApplicationContext().getFilesDir().getPath().toString() +"/appendFile");

if(!file.exists()) {

file.createNewFile();

}

BufferedSink sink = Okio.buffer(Okio.appendingSink(file));

sink.writeUtf8("Helllo,");

sink.close();

sink = Okio.buffer(Okio.appendingSink(file));

sink.writeUtf8(" java.io file");

sink.close();

BufferedSource source = Okio.buffer(Okio.source(file));

Log.e(TAG,"readWriteFile: "+ source.readUtf8());

source.close();

}catch(Exception e) {

e.printStackTrace();

}

}

3.读流:

public void sinkFromOutputStream(View view)throwsException {

try{

Buffer data =newBuffer();

data.writeUtf8("a");

data.writeUtf8("bbbbbbbbb");

data.writeUtf8("c");

ByteArrayOutputStream out =newByteArrayOutputStream();

Sink sink = Okio.sink(out);

sink.write(data,3);

Log.e(TAG,"sinkFromOutputStream: "+ data.readUtf8());

}catch(Exception e) {

e.printStackTrace();

}

}

从上面几个例子,可以看出来,Okio中关键的两个接口:Sink和Source,这两个接口都继承了Closeable接口;而Sink可以简单的看做OutputStream,Source可以简单的看做InputStream。而这两个接口都是支持读写超时设置的。结构如下:


Okio结构

它们各自有一个支持缓冲区的子类接口,BufferedSink和BufferedSource,而BufferedSink有一个实现类RealBufferedSink,BufferedSource有一个实现类RealBufferedSource;此外,Sink和Source它门还各自有一个支持gzip压缩的实现类GzipSink和GzipSource;一个具有委托功能的抽象类ForwardingSink和ForwardingSource;还有一个实现类便是InflaterSource和DeflaterSink,这两个类主要用于压缩,为GzipSink和GzipSource服务。


sink和source的实现类

那么,Okio的高效是怎么实现的呢。

所有的写数据操作,其实是:先保存在Segment中,由Buffer对象来直接操作它,最后真正写的时候,由Sink的实现来完成。代码比较多,有兴趣的可以自己去看看Buffer类及其里面的writeUtf8方法和双向链表的Segment类。

Okio只暴露了几个类,其中Buffer类实现了BufferedSink和BufferedSource,支持着缓冲区,可读可写,其内部使用了一个Segment和SegmentPool,维持着一个链表,其循环利用的机制和Android中Message的利用机制是一模一样的。

另外还有Gzip这样压缩解压缩的类,ByteString这样能将String做各种变化的类,并且还提供加密方法。

Okio这样的库,确实能为开发带来许多方便。



作者:逍遥的魂儿假不正经吧
链接:https://www.jianshu.com/p/cbbe67474581
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OkHttp是一个开源的HTTP客户端,由Square公司开发,主要用于发送网络请求和处理HTTP响应。它可以用于Android和Java平台,并提供了简单易用的API,使得网络请求变得简单和高效。 OkHttp的版本可以分为两个方面:主要版本和支持版本。 主要版本:OkHttp的主要版本指的是核心的版本号,它包含了OkHttp的基本功能和特性。目前最新的主要版本是OkHttp3,它引入了许多新特性和优化,如支持HTTP/2协议、连接池管理、自动重定向和Gzip压缩等。 支持版本:OkHttp的支持版本是指与其他或框架的集成版本号,它可以与其他一起使用,以提供更高级的功能和扩展。支持版本通常以主要版本号和次要版本号来表示。例如,OkHttp3.12.0是以主要版本号3和次要版本号12表示的支持版本。支持版本与主要版本保持兼容,因此可以使用OkHttp的较新版本与较旧版本进行集成。 Okio是一个用于处理I/O操作的,也由Square公司开发。它提供了高效、灵活和易于使用的API,用于处理流和字节。Okio的版本同样分为主要版本和支持版本。 主要版本:Okio的主要版本指的是核心的版本号,它包含了Okio的基本功能和特性。当前的主要版本是Okio2,它在Okio的基础上做了一些改进和优化,提供了更好的性能和可靠性。 支持版本:Okio的支持版本是指与其他或框架的集成版本号,用于提供更高级的功能和扩展。支持版本通常以主要版本号和次要版本号来表示。例如,Okio2.9.0是以主要版本号2和次要版本号9表示的支持版本。支持版本与主要版本保持兼容,因此可以使用Okio的较新版本与较旧版本进行集成。 总结来说,OkHttp和Okio都是Square公司开发的优秀,用于简化网络请求和I/O操作。它们的版本分为主要版本和支持版本,可以根据需求选择合适的版本来使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值