zoukankan      html  css  js  c++  java
  • andorid jar/库源码解析之okio

    目录:andorid jar/库源码解析 

    Okio:

      作用:

        说白了,就是一个IO库,基于java原生io。来进行操作,内部做了优化,简洁,高效。所以受到了一部分人的喜欢和使用

      栗子:

      读写文件。

        private void ReadFile() {
            try {
                InputStream in = new FileInputStream(new File("/sdcard/a.txt")); // 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){
                System.out.print("error " + e.getMessage());
                e.printStackTrace();
            }
        }
    
        private void WriteFile(){
            BufferedSink bSink = null;
            try {
                boolean isCreate = false;
                File file = new File("/sdcard/a.txt");
                if (!file.exists()) {
                    isCreate = file.createNewFile();
                } else {
                    isCreate = true;
                }
    
                //写入操作
                if (isCreate) {
                    Sink sink = Okio.sink(file);
                    bSink = Okio.buffer(sink);
                    bSink.writeUtf8("1");
                    bSink.writeUtf8("
    ");
                    bSink.writeUtf8("this is new file!");
                    bSink.writeUtf8("
    ");
                    bSink.writeString("我是每二条", Charset.forName("utf-8"));
                    bSink.flush();
                }
    
                System.out.print("success");
            }catch (Exception e){
                e.printStackTrace();
                System.out.print("error " + e.getMessage());
            }finally {
                try {
                    if (null != bSink) {
                        bSink.close();
                    }
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }

      源码解读:

    File file = new File("/sdcard/a.txt");
    Sink sink = Okio.sink(file);

      1、定义文件,

      2、传入文件,sink内部,创建一个文件写入流  new FileOutputStream(file)的

      3、传递流对象给Okio的sink方法。返回一个Sink 的接口的匿名对象,对象中提供的方法,可以访问到传入的流,对流进行操作。(write,flush,close)

    BufferedSink bSink = Okio.buffer(sink);
    bSink.writeUtf8("testtest");

      1、构造一个 RealBufferedSink 对象,并传入接口Sink的接口对象。

      2、调用 RealBufferedSink 对象的,write方法,写数据。

      3、在RealBufferedSink对象内部,维护有一个 okio.Buffer 对象,写入方法,首先写入Buffer内部。然后调用 sink的write方法进行写入到流中。

      4、这里的okio.Buffer,用于高效复制的时候使用。

    
    
    InputStream in = new FileInputStream(new File("/sdcard/a.txt")); 
    //2.缓冲源
    Source source = Okio.source(in);
    //3.buffer
    Buffer sink = new Buffer();
    source.read(sink, in.read());
    //4.将数据读入buffer
    System.out.print(sink.readUtf8());

      1、传入文件流,返回一个 Source接口对象,接口方法中使用了 传入的流进行操作。(read,close)

      2、构造一个Buffer对象。用于对Source接口对象,进行操作,Buffer中包含更多方法。

      3、调用 source的read方法,先创建一个数据段(Segment),然后从流中读取数据,写入到数据段中。

      4、readUtf8,从数据段中读取数据,这里涉及到了一个判断,(根据当前数据读取位置和需要读取的数据的长度,进行判定,如果当前数据段已经读完,就需要释放下一个数据段,供下次读取。

      源码:https://github.com/square/okio

      引入:

    implementation 'com.squareup.okio:okio:1.9.0'
  • 相关阅读:
    算法时间复杂度分析基础
    哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
    数学之美番外篇:快排为什么那样快
    R树空间索引
    二叉树的先序/中序/后序/层次遍历
    二叉排序树的建立、先序/中序/后序遍历、查找
    spring利用xml和注解形式实现定时任务
    javabean转成json字符首字母大写
    简单了解动静分离和前后端分离
    长连接与短连接
  • 原文地址:https://www.cnblogs.com/Supperlitt/p/12774322.html
Copyright © 2011-2022 走看看