Okio基础使用
Okio使用篇
Note: okio版本为3.3.0
Okio是一个用于io操作的框架
Okio的出现源于
java.io
以及java.nio
不够简洁,不易使用,学习成本大
Okio解决了上手成本的问题
目前okio已经由kotlin重写,并使用了kotlin multiplatform实现跨平台
这已是Okio的几乎所有类
from doc

Okio组成
ByteString
String的增强类,其中包含二进制编码,Base64,UTF-8编码,等。
Buffer
byte[]的增强,
Buffer
的组织不同于byte[]
,Buffer
的数据会形成一个链表结构,一个节点只是类的一部分。
Source
Sink
类似于java.io
中的InputStream
和OutputStream
,不同的是Source/Sink
类关系更少,方法更少,更简单,并且还提供了Timeout
机制,允许使用者自定义超时策略
ByteString
ByteString是String的争抢版,支持编码,摘要计算
1 | fun main() { |
Buffer
与ByteBuffer类似
1 | actual class Buffer : BufferedSource, BufferedSink, Cloneable, ByteChannel |
Sink
Sink为一个接口
标志性的方法就是write,表明它和OutputStream一样可以输出内容
如下是Okio-JVM的继承关系
Source
Source的实现类和Sink是成对的
Sink/Source使用
Sink/Source的创建很简单
- FileSystem直接创建
- 使用扩展函数
1 | fun fromNet() { |
timeout
1 | fun main() { |
输出
Exception in thread “main” java.io.InterruptedIOException: deadline reached
at okio.Timeout.throwIfReached(Timeout.kt:103)
at okio.InputStreamSource.read(JvmOkio.kt:91)
at okio.RealBufferedSource.read(RealBufferedSource.kt:262)
at okio.RealBufferedSource.read(RealBufferedSource.kt:75)
at com.example.okio.TestKt.main(Test.kt:31)
at com.example.okio.TestKt.main(Test.kt)