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();

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

相关文章
|
8天前
|
Java 数据库连接 数据库
Request 和 Response详解(下)
Request 和 Response详解(下)
15 1
|
8天前
|
存储 缓存 前端开发
Request 和 Response详解(中)
Request 和 Response详解(中)
21 0
|
8天前
|
前端开发 Java 应用服务中间件
Request 和 Response详解(上)
Request 和 Response详解(上)
20 0
|
11月前
|
存储
Request和Response详解
Request和Response详解
|
12月前
|
Java 应用服务中间件 Apache
|
12月前
|
缓存 应用服务中间件 API
Request 和 Response总结
Request 和 Response总结
|
12月前
|
前端开发 Java 应用服务中间件
Request 和 Response详解
Request 和 Response详解
jmeter获得Response Headers,Response Body里的值
jmeter获得Response Headers,Response Body里的值
171 0
jmeter获得Response Headers,Response Body里的值
|
存储 SQL druid
Request&Response
在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求头和请求体三部分,因此,在HttpServletRequest接口中定义了获取请求行、请求头和请求消息体的相关方法.
39317 0
Request&Response