Okio简介

news/2024/11/7 9:33:59/

一、简介

是由square公司开发的用于IO读取。补充了Java.io和java.nio的不足,以便能够更加方便,快速的访问、存储和处理数据。内部的读写操作是在内存中进行的。

二、使用

Okio的使用非常方便,相比java.io库它简化了很多繁杂的东西。这其中最核心的两个类:
Sink与Source代表的分别就是传统的输出流与输入流。

1、写数据到文件

private void writeFile() {File dir = new File(ROOT);File file = new File(dir,"Okio.txt");//文件是否存在,不存在就创建if(!file.exists()){try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}try{//获取sink对象Sink write = Okio.sink(file);//获取sink缓冲对象BufferedSink bufferedSink = Okio.buffer(write);//写入数据bufferedSink.writeUtf8("你好!\r\n");bufferedSink.writeUtf8("Hello Word\r\n");//关闭sinkbufferedSink.close();writeSink.close();}catch (Exception e){e.printStackTrace();}
}

2、从文件读取数据

private void readFile() {File file = new File(ROOT,"Okio.txt");//文件是否存在if(!file.exists()){return;}try{//获取source对象Source read = Okio.source(file);BufferedSource bufferedSource = Okio.buffer(read);String result = null;//循环读取数据while ((result = bufferedSource.readUtf8Line()) != null){System.out.println("=====result=====" + result);}//关闭sourcebufferedSource.close();read.close();}catch (Exception e){e.printStackTrace();}
}

三、原理解析

Sink
它有一子类接口 BufferedSink,BufferedSink的实现类为RealBufferedSink。

Source
它有一子类接口 BufferedSource。 BufferedSource的实现类为RealBufferedSource。

RealBufferedSink和RealBufferedSource内部都创建了一个Buffer变量

final class RealBufferedSource implements BufferedSource {public final Buffer buffer = new Buffer();public final Source source;boolean closed;.......
}final class RealBufferedSink implements BufferedSink {public final Buffer buffer = new Buffer();public final Sink sink;boolean closed;......
}

读写的操作实质就是调用的buffer的读写方法去实现的。比如RealBufferedSink中的写操作

@Override public BufferedSink writeUtf8(String string) throws IOException {if (closed) throw new IllegalStateException("closed");buffer.writeUtf8(string);return emitCompleteSegments();
}

Buffer是BufferedSink和BufferedSource的实现类,作为缓冲区,因此它既可以用来读数据,也可以用来写数据,其内部使用了一个Segment和SegmentPool,维持着一个链表来存取数据


http://www.ppmy.cn/news/882690.html

相关文章

如何使用Erika OS配置工具 ----初见Erika

致自己:与其感慨路难行,不如马上出发! 一、 什么是Erika OS Erika OS是一个基于OSEK标准的开源操作系统.采用Oil (OSEK Implementation Language)文件描述OS配置,具有基于Eclipse工具的可配置 ,易裁剪的OS。 官网地址…

Okio的使用简介

Okio的使用简介 . 简介 Okio 是由square公司开发的用于IO读取。补充了Java.io和java.nio的不足,以便能够更加方便,快速的访问、存储和处理数据。内部的读写操作是在内存中进行的。是OkHttp的底层IO库。 . Okio的核心类 ByteStrings: 是不可变的字节…

Ichimoku Kinko Hyo

Ichimoku kinko hyo(云图指标) 云图、或一目均衡表指标(Ichimoku kinko hyo),简称IKH,此指标是由笔名为Ichimoku Sanjin的日本记者在1930年代发明的,它是显示市场趋势,趋势的强弱&am…

orika入门使用及组件化

本篇文章,介绍orika的简单使用。以及借助SPI或Spring对orika进行组件化,让增加类型转换规则更加简单方便。 一、orika简介 在工作中,我们经常涉及到对象的DTO、DO等对象的转换。对于这些对象的转换,我们除了自己写大量的get/set方…

IKAnalyzer

IKAnalyzer 下载官网 https://code.google.com/archive/p/ik-analyzer/downloads 点击打开链接 IKAnalyzer2012_u6.zip IK Analyer 2012 完整分发包 upgrade 6 搬运地址 链接: IKAnalyzer2012_u6.zip 密码: srm7 IKAnalyzer 开源项目 http://code.google.com/p…

Orika简单使用

使用orika进行对象间Mapping 1. 当两个类的属性名都一样 package com.orika;/*** Title:CopiedStudent.java* Description:** author zhuyang* version 1.0 2017/7/18*/ public class CopiedStudent {private String name;private Integer age;public String getName() {retur…

Nacos的Java SDK

添加sdk依赖 <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>${version}</version> </dependency>本文的版本为&#xff1a;2.2.0 配置管理 在界面上添加配置 我们在界面…

A.Mio visits ACGN Exhibition

传送门 题意:该题目的目的是让你求方案数&#xff0c;求方案数的问题其实我们就可以很容易想到动态规划了&#xff0c;因为求方案数一般来说是满足动态规划的两个条件&#xff08;最优子结构&#xff0c;无后效性&#xff09;。 那么我们如何考虑状态呢&#xff0c;我们的状态…