【发布时间】:2017-07-10 04:40:58
【问题描述】:
我有一个能够以两种方式返回 PDF 文件的网络服务:
RAW:文件仅包含在响应正文中。例如:
HTTP/1.1 200 OK
Content-Type: application/pdf
<file_contents>
JSON:文件被编码(Base 64)并作为具有以下结构的 JSON:
HTTP/1.1 200 OK
Content-Type: application/json
{
"base64": <file_contents_base64>
}
我希望能够通过使用以下架构在 Android / Java 上使用这两个服务:
// Get response body input stream (OUT OF THE SCOPE OF THIS QUESTION)
InputStream bodyStream = getResponseBodyInputStream();
// Get PDF file contents input stream from body stream
InputStream fileStream = getPDFFileContentsInputStream(bodyStream);
// Write stream to a local file (OUT OF THE SCOPE OF THIS QUESTION)
saveToFile(fileStream);
对于第一种情况(RAW 响应),响应正文将是文件本身。这意味着getPDFFileContentsInputStream(InputStream) 方法的实现是微不足道的:
@NonNull InputStream getPDFFileContentsInputStream(@NonNull InputStream bodyStream) {
// Return the input
return bodyStream;
}
问题是:第二种情况(JSON响应)如何实现getPDFFileContentsInputStream(InputStream)方法?
【问题讨论】:
-
byte[] encodedBytes = json.getBytes("base64"); byte[] decodedBytes = (new BASE64Decoder()).decodeBuffer(encodedBytes); return new ByteArrayInputStream(decodedBytes ); -
在我的回答中检查我的(编辑的)评论。
标签: java android json http inputstream