OkHttp解析(三)关于Okio
OkHttp解析系列
OkHttp解析(一)从用法看清原理
OkHttp解析(二)网络连接
OkHttp解析(三)关于Okio
从前两篇文章我们知道,在OkHttp底层网络连接是使用Socket,连接成功后则通过Okio库与远程socket建立了I/O连接,接着调用
createTunnel
创建代理隧道,在这里HttpStream与Okio建立了I/O连接。本篇文章就来看看Okio的使用
Okio
从最新的Okio上看它的说明
这里介绍到
Okio 补充了
java.io
和java.nio
的内容,使得数据访问、存储和处理更加便捷。
ByteString and Buffer
Okio则建立在ByteStrings和Buffers上
ByteStrings:它是一个不可变的字节序列,对于字符数据来说,
String
是非常基础的,但在二进制数据的处理中,则没有与之对应的存在,ByteString
应运而生。ByteStrings
很多方法与String
用法一样,它更容易把一些二进制数据当作一个值来处理,它更容易处理一些二进制数据。此外它也可以把二进制数据编解码为十六进制(hex),base64和UTF-8格式。
它向我们提供了和String
非常类似的 API:获取字节:指定位置,或者整个数组;
编解码:hex,base64,UTF-8;
判等,查找,子串等操作;
Buffer:
Buffer
是一个可变的字节序列,就像ArrayList
一样。我们使用时只管从它的头部读取数据,往它的尾部写入数据就行了,而无需考虑容量、大小、位置等其他因素。
Source and Sink
Okio 吸收了 java.io
一个非常优雅的设计:流(stream),流可以一层一层套起来,不断扩充能力,最终完成像加密和压缩这样复杂的操作。这正是“修饰模式”的实践。
修饰模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。
Okio 有自己的流类型,那就是 Source
和 Sink
,它们和 InputStream
与 OutputStream
类似,前者为输入流,后者为输出流。
它们还有一些新特性:
超时机制,所有的流都有超时机制;
API 非常简洁,易于实现;
Source
和Sink
的 API 非常简洁,为了应对更复杂的需求,Okio 还提供了BufferedSource
和BufferedSink
接口,便于使用(按照任意类型进行读写,BufferedSource 还能进行查找和判等);不再区分字节流和字符流,它们都是数据,可以按照任意类型去读写;
便于测试,
Buffer
同时实现了BufferedSource
(读) 和BufferedSink
(写) 接口,便于测试;
介绍完上面几个类后,看个UML图,理解他们之间的关系
http://www.taodudu.cc/news/show-6726106.html
相关文章:
- vscode 怎么编辑sphinx_VSCode Snippets 食用指南
- VS新增snippets步骤
- 用Snippets创建自己喜欢的注释格式
- 在docker上编译openjdk8
- 51单片机(四)定时器中断(+数码管——24小时制钟表)
- 基于51单片机的可由按键切换12\24小时制的电子时钟proteus仿真
- MATLAB数学建模(4)-数据的统计和分析
- JS 计算外出办事时间(按照一天工作八小时制)
- project中如何设置非标准工作时间
- 【科普知识】电机的10种工作制说明:S1~S10
- 腾讯执行8小时工作制为什么上热搜?还不是年轻人太好欺负了
- 传统的 8 小时工作制为什么会效率低下?
- react 每2秒调用一次函数
- js 每隔2秒循环调用
- stm32f103为什么不能延迟2秒
- 微信长按2秒居然有这5种功能?用了这么多年,现在才知道
- js:秒转换为小时分钟秒格式
- js获取到的时间减1秒或加1秒
- js中写一个函数,第一秒打印1,第二秒打印2
- Vue中倒计时2秒跳转界面
- 倒计时3分钟
- 脚本每隔2秒读取CPU温度及频率
- 使用定时器编程,在实时显示当前时间,每隔2秒时钟内容更新一次
- 第一秒输出0,然后每隔一秒分别输出1,2,3,4用for 和setTimeout
- 延迟2秒
- Android等待2秒执行,每隔2秒执行
- STM32定时器实现5秒周期串口通信,2秒LED灯闪烁
- PLC控制电机正转5秒停2秒反转5秒停2秒循环3次梯形图(博图v18)
- Kerberos 域委派攻击之约束性委派
- js 事件的委派
OkHttp解析(三)关于Okio相关推荐
- Disruptor源码解析三 RingBuffer解析
目录 系列索引 前言 主要内容 RingBuffer的要点 源码解析 系列索引 Disruptor源码解析一 Disruptor高性能之道 Disruptor源码解析二 Sequence相关类解析 D ...
- Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- 碰撞检测GJK算法论文解析三
碰撞检测GJK算法论文解析三 再探Appendix Ⅱ 内容详解 再探The Distance Subalgorithm 内容详解 过程1 过程2 过程3 这里要先纠正上篇文章的一些错误,就是上篇文章 ...
- 北京络捷斯特第三方物流信息系统技术解析(三) 订单录入-出库订单
北京络捷斯特第三方物流信息系统技术解析(三) 订单录入-出库订单 2.1.2 出库订单 出库订单包括有订单信息.订单出库信息.订单货品三个标签页的信息编写. 订单信息界面截图: 2.1.2图(1) 订 ...
- Okhttp源码解析(三)——责任链
参考:https://www.jianshu.com/p/e3b6f821acb8 上文提到 请求的具体执行在RealCall.getResponseWithInterceptorChain() pr ...
- OkHttp3源码解析(三)——连接池复用
OKHttp3源码解析系列 OkHttp3源码解析(一)之请求流程 OkHttp3源码解析(二)--拦截器链和缓存策略 本文基于OkHttp3的3.11.0版本 implementation 'com ...
- Java 面试知识点解析(三)——JVM篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Tomcat源码解析三:tomcat的启动过程
Tomcat组件生命周期管理 在Tomcat总体结构 (Tomcat源代码解析之二)中,我们列出了Tomcat中Server,Service,Connector,Engine,Host,Context ...
- ReactiveSwift源码解析(三) Signal代码的基本实现
上篇博客我们详细的聊了ReactiveSwift源码中的Bag容器,详情请参见<ReactiveSwift源码解析之Bag容器>.本篇博客我们就来聊一下信号量,也就是Signal的的几种状 ...
最新文章
- 自己做网站服务器需要买吗,自己做网站要买服务器
- mongodb常用管理命令
- javaweb开发3.基于Servlet+JSP+JavaBean开发模式的用户登录注册
- 同步vmware虚拟机与宿主机的时间
- osgi实战学习之路:8. Service-3之ServiceTracker
- LiveVideoStackCon深圳-嵌入式音频开发
- 2019.9.17最小生成树知识点回顾
- P5007-DDOSvoid的疑惑【树形dp】
- 前端基础-html-列表
- 训练日志 2018.8.29
- Jmeter(二)关联
- WPF的悬停工具栏实现方案
- tpcc-mysql percona_tpcc-mysql 对percona5.6进行压力测试
- Python多态原理与示例演示
- Centos7下,LVM根分区扩容
- 让在vc6创建的程序中,控件可以随xp风格的改变而变化,不用再程序中添加代码来自己实现~...
- ASP .NET中一个可以用来大作文章的地方。
- Mybatis面向接口编程
- C++ BMP转JPG方法一
- 一个具有多个组件的在线平面图设计 平面图 在线制图