OkHttpUtils 关于response.body().byteStream()的坑

简介: OkHttpUtils 关于response.body().byteStream()的坑

起因:


OkHttpUtils类使用遇到的一个坑记录,在使用流文件的时候,不能进行两次的response.body().byteStream(),否则第二次调用该方法的时候流是关闭的,不能进行使用了;

/**

* post请求,返回InputStream

*

* @param url

* @param json

* @return

* @throws IOException

*/

public InputStream postInputStream(String url, String json) throws IOException {

   RequestBody body = RequestBody.create(JSON, json);

   Request request = new Request.Builder()

           .url(url)

           .post(body)

           .build();

   Response response = mOkHttpClient.newCall(request).execute();

   if (response.isSuccessful()) {

       return response.body().byteStream();

   } else {

       throw new IOException("Unexpected code " + response);

   }

}

/**

* Returns a new {@code BufferedSource} that can read data from this {@code BufferedSource}

* without consuming it. The returned source becomes invalid once this source is next read or

* closed.

*

* For example, we can use {@code peek()} to lookahead and read the same data multiple times.

*

* <pre> {@code

*

*   Buffer buffer = new Buffer();

*   buffer.writeUtf8("abcdefghi");

*

*   buffer.readUtf8(3) // returns "abc", buffer contains "defghi"

*

*   BufferedSource peek = buffer.peek();

*   peek.readUtf8(3); // returns "def", buffer contains "defghi"

*   peek.readUtf8(3); // returns "ghi", buffer contains "defghi"

*

*   buffer.readUtf8(3); // returns "def", buffer contains "ghi"

* }</pre>

*/

BufferedSource peek();


/** Returns an input stream that reads from this source. */

InputStream inputStream();

关于流文件读取一次之后再次时候流会关闭的最底层方法;一个坑;

相关文章
|
XML 域名解析 JSON
【RESTful】RESTful API 接口设计规范 | 示例
【RESTful】RESTful API 接口设计规范 | 示例
6694 0
【RESTful】RESTful API 接口设计规范 | 示例
|
JSON Java API
玩转Spring Boot之RestTemplate的使用
在java代码里想要进行restful web client服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。Spring Boot提供了一种简单便捷的内置模板类来进行操作,这就是RestTemplate。
4990 0
|
6月前
|
前端开发 Java 数据库连接
Spring Boot 升级 3.2 报错 Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String
Spring Boot 升级 3.2 报错 Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String
|
存储 SpringCloudAlibaba 前端开发
SpringCloud Alibaba 2021版 nacos 配置中心教程
SpringCloud Alibaba 2021版 nacos 配置中心教程
10670 1
SpringCloud Alibaba 2021版 nacos 配置中心教程
|
关系型数据库 Java Go
解决 MyBatis-Plus + PostgreSQL 中的 org.postgresql.util.PSQLException 异常
解决 MyBatis-Plus + PostgreSQL 中的 org.postgresql.util.PSQLException 异常
1204 0
|
算法 安全 Go
Go切片删除元素错过这篇你就out了
Go切片删除元素错过这篇你就out了
2555 0
|
6月前
|
JavaScript API 开发者
【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门
【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门
785 0
|
6月前
|
安全 关系型数据库 MySQL
使用Docker-compose快速构建Nacos服务
【1月更文挑战第1天】 在微服务架构中,服务的注册与发现扮演着至关重要的角色。Nacos(Naming and Configuration Service)是阿里巴巴开源的服务注册与发现组件,致力于支持动态配置管理和服务发现。
2090 2
vscode设置自动保存步骤
vscode设置自动保存就不用每次要运行时候去先保存一下才能加载新页面了
14851 0
vscode设置自动保存步骤