如何从 JsonObject 创建 InputStream 对象
Posted
技术标签:
【中文标题】如何从 JsonObject 创建 InputStream 对象【英文标题】:How to Create InputStream Object from JsonObject 【发布时间】:2014-07-12 01:17:03 【问题描述】:我试图弄清楚如何检索存储在 JsonObject 中的原始字节并将其转换为 InputStream 对象?
我想可能是这样的:
InputStream fis = new FileInputStream((File)json.getJsonObject("data"));
当然,我还没有尝试过,但只是想知道是否有人对此有任何经验并知道首选的方法?
【问题讨论】:
以防万一您遇到必须流式传输非常大的 JSON 对象的内容的情况,这可能会在toString()
方法调用上产生 OutOfMemory 错误,请使用多个 ByteArrayInputStreams 作为呈现的@987654321 @
【参考方案1】:
您可以将JSONObject
转换为其String
表示,然后将该字符串转换为InputStream
。
问题中的代码将 JSONObject 转换为 File
,但我不确定这是否按预期工作。但是,以下是我之前做过的事情(目前从记忆中复制):
String str = json.getJSONObject("data").toString();
InputStream is = new ByteArrayInputStream(str.getBytes());
请注意,JSONObject
的 toString()
方法会覆盖 java.lang.Object
类中的方法。
来自Javadoc:
返回:对象的可打印、可显示、可移植、可传输表示,以 (左大括号)开始,以 (右大括号)结尾。
【讨论】:
所以你的解决方案确实有效,但我有一个问题,如果你将一个文件传递给你的 rest 调用,为什么它会自动将它转换为 java 端的 InputStream?String
被转换为字节序列,而字节序列又被转换为InputStream
。
请注意 JSONObject 的 tostring 方法对于非 ascii 字符是不安全的。它不会以 utf-8 编码【参考方案2】:
如果你想要字节,使用这个
json.toString().getBytes()
或者写一个文件savedFile
包含json.toString,然后
InputStream fis = new FileInputStream(savedFile);
【讨论】:
以上是关于如何从 JsonObject 创建 InputStream 对象的主要内容,如果未能解决你的问题,请参考以下文章
从 OutputStream 创建 InputStream 的最有效方法