【问题标题】:How to Create InputStream Object from JsonObject如何从 JsonObject 创建 InputStream 对象
【发布时间】:2014-07-12 01:17:03
【问题描述】:

我试图弄清楚如何检索存储在 JsonObject 中的原始字节并将其转换为 InputStream 对象?

我想可能是这样的:

InputStream fis = new FileInputStream((File)json.getJsonObject("data"));

当然,我还没有尝试过,但只是想知道是否有人对此有任何经验并知道首选的方法?

【问题讨论】:

  • 以防万一您遇到必须流式传输非常大的 JSON 对象的内容的情况,这可能会在 toString() 方法调用上产生 OutOfMemory 错误,请使用多个 ByteArrayInputStreams 作为呈现的@987654321 @

标签: java json file rest inputstream


【解决方案1】:

您可以将JSONObject 转换为其String 表示,然后将该字符串转换为InputStream

问题中的代码将 JSONObject 转换为 File,但我不确定这是否按预期工作。但是,以下是我之前做过的事情(目前从记忆中复制):

String str = json.getJSONObject("data").toString();
InputStream is = new ByteArrayInputStream(str.getBytes());

请注意,JSONObjecttoString() 方法会覆盖 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2015-11-13
    • 2017-07-11
    • 2012-07-15
    • 2010-10-26
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多