Okio 1.9简单入门
Okio 1.9简单入门
Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问、存储和处理你的数据。而OkHttp的底层也使用该库作为支持。
该库极大的简化I/O操作。
Gradle引用如下(最新版:1.9 )
compile 'com.squareup.okio:okio:1.9.0'
Okio类作为OkIo库暴露给外部使用的类,提供大量的静态方法;
其有两个关键的接口,Sink和Source,继承了Closeable接口;
Sink可以简单的看做OutputStream;->写操作! ->通过一个Sink获得一个BufferedSink。
Source可以简单的看做InputStream。->读操作! ->通过一个Source获得BufferedSource,
如下图:

Sink 与Source类的结构图如下:

说明:
Sink 有个子类接口 BufferddSink :定义了一系列写入缓存区的方法
实现类 RealBufferedSink
Source 有个子类接口 BufferedSource :定义了一系列读取缓存区的方法
实现类RealBufferedSource
支持gzip压缩的实现类GzipSink和GzipSource及压缩类DeflaterSink和InflaterSource;
实现类 RealBufferedSink 、RealBufferedSource结构:

Buffer类
Buffer类操作写动作,但是数据并没真正的完成写,而是保存在链表(Segment双向链表)中;
具体使用
对Okio库的整体框架有了基本了解,那么就该实际操作了。
具体步骤如下:
1.调用Okio类的静态方法获取Source(Sink)
2.调用Okio类库的静态方法,通过刚才获取的Source(Sink)获取BufferedSource(BufferedSink)
3.对缓冲区根据实际需求做相应操作
4.若是Sink,须将调用flush()
5.最后close掉,避免内存泄漏
读取文件
一.在项目根目录下新建文件“test.txt”,并写入一些文字;
二.新建Class:-> Okio_Demo
三.进入读写操作;
四.在类中新建 main()方法,进行测试!
说明:所有功能都是在类中写main()方法中进行测试!!
如下图:




创建文件并写数据
);
} catch (IOException e) {
e.printStackTrace();
}
}
Buffer 读操作:
/**
* 读buffer
*/
public static void sourceFromInputStream(){
//1.构建字节数组流
try {
InputStream
in = new ByteArrayInputStream(("adasfdsaf").getBytes());
//2.缓冲源
Source source=Okio.source(in);
//3.buffer
Buffer sink = new Buffer();
source.read(sink,in.read());
//4.将数据读入buffer
System.out.print(sink.readUtf8());
} catch (Exception e) {
e.printStackTrace();
}
}
Okio工具类—ByteString类,这个类可以用来做各种变化,它将byte转会为String,而这个String可以是utf8的值,也可以是base64后的值,也可以是md5的值,也可以是sha256的值,总之就是各种变化,最后取得你想要的值。
如:
ByteString.of("ss".getBytes()).base64();
ByteString.of("ss".getBytes()).md5();
ByteString.of("ss".getBytes()).sha1();
ByteString.of("ss".getBytes()).sha256();
最后借用一个大牛的类图!
Okio的类图关系如下:

官网地址:
1.OkioAPI
Okio 1.9简单入门的更多相关文章
- 用IntelliJ IDEA创建Gradle项目简单入门
Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...
- [原创]MYSQL的简单入门
MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...
- emacs最简单入门,只要10分钟
macs最简单入门,只要10分钟 windwiny @2013 无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Docker 简单入门
Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- git简单入门
git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...
- 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
- Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门
说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...
随机推荐
- 基于.net开发chrome核心浏览器【五】
一:本篇将解决的问题 本章主要为了解决一下几个问题: 1.JsDialog的按钮错位的问题 我们开发出的浏览器,在有些操系统上调用alert,confirm之类的对话框时,确定和取消按钮会出现错位的情 ...
- DPM检测模型 训练自己的数据集 读取接口修改
(转载请注明作者和出处 楼燚(yì)航的blog :http://www.cnblogs.com/louyihang-loves-baiyan/ 未经允许请勿用于商业用途) 本文主要是针对上一篇基于D ...
- 第8章 用户模式下的线程同步(3)_Slim读写锁(SRWLock)
8.5 Slim读/写锁(SRWLock)——轻量级的读写锁 (1)SRWLock锁的目的 ①允许读者线程同一时刻访问共享资源(因为不存在破坏数据的风险) ②写者线程应独占资源的访问权,任何其他线程( ...
- [No000007]搜索引擎以图搜图的原理
之前,Google把"相似图片搜索"正式放上了首页. 你可以用一张图片,搜索互联网上所有与它相似的图片.点击搜索框中照相机的图标. 一个对话框会出现. 你输入网片的网址,或者直接上 ...
- Eclipse C++开发环境配置(很简洁)
from: https://www.zybuluo.com/ghostfn1/note/303921
- 持久化存储——偏好设置,plist,归档---学习笔记二
//一. 本地持久化 //1.沙盒 //1.1 应用程序包:存放的是应用程序的源文件,包括资源文件和可执行文件 NSString *path = [[NSBundle mainBundle]bundl ...
- 如何定位web前后台的BUG
一.对系统整体的了解 Server端:jsp+Servlet+json 数据库:sql.MySQL.oracle等 前台: 涉及到 jstl,jsp,js,css,htm等方面 后台:servlet, ...
- Jenkins 安装
1. 调整tomcat的jvm配置, 以免内存不够, 在catalina.sh中 #!bin/sh下添加 JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX ...
- 方差分析 ANOVA
来源: http://blog.sciencenet.cn/blog-479412-391481.html 方差分析是为了比较多个总体样本均数是否存在差别.该方法有RA.Fisher首先提出,后来由G ...
- Ros与Vrep平台搭建
参考资料: ROS安装: ros 是一个framework 和Android有点像,内核用的linux.Ros提供了一种供机器人开发者迅速上手的一个平台, 可以快速搭建自己的应用,利用ros下面自带的 ...