zoukankan      html  css  js  c++  java
  • okio okhttp

      Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问、存储和处理你的数据。而OkHttp的底层也使用该库作为支持。可以让你的i/o操作更加的简单.

    Buffer类是方便访问和存储数据;有read和write方法

    Okio类是库提供的一个供外部使用的类,提供了大量的静态方法:

    其中有两个十分重要的接口Sink 和 Source

    Sink:就相当于OutputStream  写操作  通过Sink可以获得一个BufferedSink

    Source:就相当于InputStream  写操作  通过Source可以获得一个BufferedSource

    简单使用

    读取复制文件

     try {
                //获取BufferedSource
                BufferedSource source = Okio.buffer(Okio.source(new FileInputStream("in.txt")));
                //获取BufferedSink
                BufferedSink sink = Okio.buffer((Okio.sink(new FileOutputStream("out.txt"))));
                //将source全部读写到sink中
                source.readAll(sink);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

      Okio工具类—ByteString类,这个类可以用来做各种变化,它将byte转会为String,而这个String可以是utf8的值,也可以是base64后的值,也可以是md5的值,也可以是sha256的值,总之就是各种变化,最后取得你想要的值。

    String str = "this is new string";
            ByteString string = ByteString.encodeUtf8(str);
            //打印string的base64值
            Log.e(TAG, "onCreate: " + string.base64() );
            //打印string的md5值
            Log.e(TAG, "onCreate: " + string.md5().hex() );

    E/MainActivity: onCreate: dGhpcyBpcyBuZXcgc3RyaW5n
    E/MainActivity: onCreate: [hex=9c5e308d65c718bc69d616a0b530b004]

    OKHttp

     常用类:Request  同步提交请求和异步提交请求

        Response:响应  包括响应头(Header) 响应码(code) 响应体(content)

    从服务器同步获取数据

     private void get() {
            ExecutorService executor = Executors.newSingleThreadExecutor();
            executor.submit(new Runnable() {
                @Override
                public void run() {
                    //获取构建器
                    Request.Builder builder = new Request.Builder();
                    //添加url地址
                    builder.url("https://raw.githubusercontent.com/square/okhttp/master/README.md");
                    //获取Request对象
                    Request request = builder.build();
                    Log.d(TAG, "run: " + request);
                    //获取Call对象
                    Call call = mClient.newCall(request);
                    try {
                        //提交同步请求
                        Response response = call.execute();
                        if (response.isSuccessful()) {
                            final String string = response.body().string();
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    mContentTextView.setText(string);
                                }
                            });
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
            executor.shutdown();
        }

    从服务器异步获取数据

     private void response() {
            Request.Builder builder = new Request.Builder();
            builder.url("https://raw.githubusercontent.com/square/okhttp/master/README.md");
            Request request = builder.build();
            Call call = mClient.newCall(request);
            //提交异步请求
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    Log.d(TAG, "onFailure() called with: call = [" + call + "], e = [" + e + "]");
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    Log.d(TAG, "onResponse() called with: call = [" + call + "], response = [" + response + "]");
                    //获取响应码
                    int code = response.code();
                    //获取响应头 以map形式存在,可以通过key值获取对应的value
                    Headers headers = response.headers();
                    //获取响应体
                    String content = response.body().string();
                    final StringBuilder buf = new StringBuilder();
                    buf.append("code: " + code);
                    buf.append("
    Headers: 
    " + headers);
                    buf.append("
    body: 
    " + content);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mContentTextView.setText(buf.toString());
                        }
                    });
                }
            });
        }

    向服务器提交数据

     private void post() {
            //从服务器开发者文档获取MediaType
            MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8");
            String POST_URL = "https://api.github.com/markdown/raw";
            Request.Builder builder = new Request.Builder();
            builder.url(POST_URL);
            builder.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, "Hello world github/linguist#1 **cool**, and #1!"));
            Request request = builder.build();
            Call call = mClient.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
    
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if (response.isSuccessful()) {
                        final String content = response.body().string();
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                mContentTextView.setText(content);
                            }
                        });
                    }
                }
            });
        }
  • 相关阅读:
    [RxSwift教程]14、其他操作符:delay、materialize、timeout等
    [RxSwift教程]13、连接操作符:connect、publish、replay、multicast
    Java虚拟机类加载机制及双亲委派模式分析
    面试系列-如何设计一个类
    谈谈 MySQL 的 JSON 数据类型
    Java 多线程编程(2-异步中包含同步)
    还堵在高速路上吗?带你进入Scratch世界带你飞
    SQL Server SSIS相关介绍
    SQL Server开启READ_COMMITTED_SNAPSHOT
    SqlServer中select语句引起的死锁
  • 原文地址:https://www.cnblogs.com/conglingkaishi/p/9506324.html
Copyright © 2011-2022 走看看