如何从JsonObject创建InputStream对象

8
我正在尝试弄清楚如何检索存储在JsonObject中的原始字节,并将其转换为InputStream对象?我想这可能是这样的:
InputStream fis = new FileInputStream((File)json.getJsonObject("data"));

虽然我没有尝试过,但想知道是否有人对此有经验,并知道最佳操作方式?


如果您遇到必须流式传输非常大的JSON对象内容的情况,而这可能会在toString()方法调用时产生OutOfMemory错误,请使用多个ByteArrayInputStream,如此处所示。 - Roman Vottner
2个回答

24

您可以将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? - This 0ne Pr0grammer
1
String转换为一系列字节,然后将其转换为InputStream - Chthonic Project
请注意,JSONObject的tostring方法对于非ASCII字符不安全。它不会编码为utf-8。 - Ayyappa

7
如果您想要字节数,请使用这个。
json.toString().getBytes()

或者写一个文件savedFile,其中包含json.toString,然后...
InputStream fis = new FileInputStream(savedFile);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接