OkHttp解析系列

OkHttp解析(一)从用法看清原理
OkHttp解析(二)网络连接
OkHttp解析(三)关于Okio

从前两篇文章我们知道,在OkHttp底层网络连接是使用Socket,连接成功后则通过Okio库与远程socket建立了I/O连接,接着调用createTunnel创建代理隧道,在这里HttpStream与Okio建立了I/O连接。本篇文章就来看看Okio的使用

Okio

从最新的Okio上看它的说明
这里介绍到

Okio 补充了 java.iojava.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 有自己的流类型,那就是 SourceSink,它们和 InputStreamOutputStream 类似,前者为输入流,后者为输出流。

它们还有一些新特性:

  • 超时机制,所有的流都有超时机制;

  • API 非常简洁,易于实现;

  • SourceSink 的 API 非常简洁,为了应对更复杂的需求,Okio 还提供了 BufferedSourceBufferedSink 接口,便于使用(按照任意类型进行读写,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相关推荐

  1. Disruptor源码解析三 RingBuffer解析

    目录 系列索引 前言 主要内容 RingBuffer的要点 源码解析 系列索引 Disruptor源码解析一 Disruptor高性能之道 Disruptor源码解析二 Sequence相关类解析 D ...

  2. Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  3. 碰撞检测GJK算法论文解析三

    碰撞检测GJK算法论文解析三 再探Appendix Ⅱ 内容详解 再探The Distance Subalgorithm 内容详解 过程1 过程2 过程3 这里要先纠正上篇文章的一些错误,就是上篇文章 ...

  4. 北京络捷斯特第三方物流信息系统技术解析(三) 订单录入-出库订单

    北京络捷斯特第三方物流信息系统技术解析(三) 订单录入-出库订单 2.1.2 出库订单 出库订单包括有订单信息.订单出库信息.订单货品三个标签页的信息编写. 订单信息界面截图: 2.1.2图(1) 订 ...

  5. Okhttp源码解析(三)——责任链

    参考:https://www.jianshu.com/p/e3b6f821acb8 上文提到 请求的具体执行在RealCall.getResponseWithInterceptorChain() pr ...

  6. OkHttp3源码解析(三)——连接池复用

    OKHttp3源码解析系列 OkHttp3源码解析(一)之请求流程 OkHttp3源码解析(二)--拦截器链和缓存策略 本文基于OkHttp3的3.11.0版本 implementation 'com ...

  7. Java 面试知识点解析(三)——JVM篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  8. Tomcat源码解析三:tomcat的启动过程

    Tomcat组件生命周期管理 在Tomcat总体结构 (Tomcat源代码解析之二)中,我们列出了Tomcat中Server,Service,Connector,Engine,Host,Context ...

  9. ReactiveSwift源码解析(三) Signal代码的基本实现

    上篇博客我们详细的聊了ReactiveSwift源码中的Bag容器,详情请参见<ReactiveSwift源码解析之Bag容器>.本篇博客我们就来聊一下信号量,也就是Signal的的几种状 ...

最新文章

  1. 自己做网站服务器需要买吗,自己做网站要买服务器
  2. mongodb常用管理命令
  3. javaweb开发3.基于Servlet+JSP+JavaBean开发模式的用户登录注册
  4. 同步vmware虚拟机与宿主机的时间
  5. osgi实战学习之路:8. Service-3之ServiceTracker
  6. LiveVideoStackCon深圳-嵌入式音频开发
  7. 2019.9.17最小生成树知识点回顾
  8. P5007-DDOSvoid的疑惑【树形dp】
  9. 前端基础-html-列表
  10. 训练日志 2018.8.29
  11. Jmeter(二)关联
  12. WPF的悬停工具栏实现方案
  13. tpcc-mysql percona_tpcc-mysql 对percona5.6进行压力测试
  14. Python多态原理与示例演示
  15. Centos7下,LVM根分区扩容
  16. 让在vc6创建的程序中,控件可以随xp风格的改变而变化,不用再程序中添加代码来自己实现~...
  17. ASP .NET中一个可以用来大作文章的地方。
  18. Mybatis面向接口编程
  19. C++ BMP转JPG方法一
  20. 一个具有多个组件的在线平面图设计 平面图 在线制图

热门文章

  1. php smtp 抄送,PHP-SMTP发送邮件
  2. cc1plus.exe 警告说命令行选项 -std=c11 只能用于 C/ObjC,不能用于 C++,应该怎么解决...
  3. Mesh的平面切割算法
  4. 阿里云天池实验室 import torchvision import cv2 报错问题
  5. 一文带你看透空气质量
  6. 一些可以参考的文档集合1
  7. GBASE 8s数据库监控
  8. EtherCAT 从站作参考时钟
  9. 《Go语言圣经练习题》
  10. 阿里旺旺信息发送器(一键发送,教程V)