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的类图关系如下:

Demo下载

官网地址:

1.OkioAPI

2.Okio GitHub地址

Okio 1.9简单入门的更多相关文章

  1. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

  2. [原创]MYSQL的简单入门

    MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...

  3. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

  4. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  5. Docker 简单入门

    Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737

  6. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  7. git简单入门

    git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...

  8. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

  9. Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门

    说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...

随机推荐

  1. AI (Adobe Illustrator)详细用法(三)

    本文主要是介绍和色彩相关的用法. 一.路径外观设置 1.设置描边粗细 手动输入20px 下拉选择 鼠标选中数值,按向上或向下的箭头调整 在右边的描边菜单中修改 Note:按住shift键,然后上下箭头 ...

  2. 自学一个月的java了

    不知道这篇博文有不有朋友看到.先自我介绍一下,硕士一年级下学期. 对编程感兴趣,硕士一年级下学期转学计算机专业,目前刚好一个月的时间.接触计算机也是刚好一个月的时间. 学习了java,javaweb. ...

  3. u3d_shader_surface_shader_5

    CubeMap 的实现 参考: http://blog.csdn.net/candycat1992/article/details/21827365     制作cubeMap三维纹理,surface ...

  4. uwsgi+flask环境中安装matplotlib

    uwsgi+flask的python有自身的virtual environment,可以通过如下命令进入 . venv/bin/activate 虽然通过sudo apt-get install py ...

  5. flask表单提交的两种方式

    一.通用方式 通用方式就是使用ajax或者$.post来提交. 前端html <form method="post" action="/mockservice&qu ...

  6. 漫谈python中的搜索/排序

    在数据结构那一块,搜索有顺序查找/二分查找/hash查找,而排序有冒泡排序/选择排序/插入排序/归并排序/快速排序.如果遇到数据量和数组排列方式不同,基于时间复杂度的考虑,可能需要用到混合算法.如果用 ...

  7. 设置word里的代码格式,使之有底纹的效果

    目录 1    实现效果:    1 2    怎么才能在word里实现这样的显示?    1 如何设置word里的代码格式,使之有底纹的效果    2     实现效果: 怎么才能在word里实现这 ...

  8. Python之线程、进程和协程

    python之线程.进程和协程 目录: 引言 一.线程 1.1 普通的多线程 1.2 自定义线程类 1.3 线程锁 1.3.1 未使用锁 1.3.2 普通锁Lock和RLock 1.3.3 信号量(S ...

  9. Incorrect string value异常解决

    mysql数据库的一个问题 1366-Incorrect string value:'\xE5\x8D\xA1\xE5......' for column 'filename' at row 1 问题 ...

  10. cookie记住密码功能

    很多门户网站都提供了记住密码功能,虽然现在的浏览器都已经提供了相应的记住密码功能 效果就是你每次进入登录页面后就不需要再进行用户名和密码的输入: 记住密码功能基本都是使用cookie来进行实现的,因此 ...