是由square公司开发的用于IO读取。补充了Java.io和java.nio的不足,以便能够更加方便,快速的访问、存储和处理数据。内部的读写操作是在内存中进行的。
Okio的使用非常方便,相比java.io库它简化了很多繁杂的东西。这其中最核心的两个类:
Sink与Source代表的分别就是传统的输出流与输入流。
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");
//关闭sink
bufferedSink.close();
writeSink.close();
}catch (Exception e){
e.printStackTrace();
}
}
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);
}
//关闭source
bufferedSource.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,维持着一个链表来存取数据