【问题标题】:What is the better apporach to print a large json data in java 'getOutputStream' or 'getWriter'在 java 'getOutputStream' 或 'getWriter' 中打印大型 json 数据的更好方法是什么
【发布时间】:2018-11-21 18:09:03
【问题描述】:

场景就像我需要打印非常大的 json 数据集。此 json 数据由移动应用程序使用。在 Java 服务应用程序中,如下所示用于打印 json。

response.getWriter().println(mainjson);

getWriter 花费太多时间来打印所有数据。

我也听说过getOutputStream。在大型 json 数据的情况下哪个更快? 任何帮助将不胜感激:-)

【问题讨论】:

  • Writer 只是包装了 OutputStream。由于 json 是基于文本的,因此这是正确的方法。我认为真正的问题是“getWriter 花费太多时间”是什么意思?
  • 对于真正的大数据也不是。为什么不分块加载它并在向下滚动时加载每个块
  • @f1sh 是的 getWriter 花费了太多时间。他们有什么方法可以减少时间吗?
  • @AnurajR 调用 Writer.write 几乎不会花费太多时间。是什么让您认为是使用 Writer 占用了处理时间?
  • @f1sh 在打印这么大的 json 数据时,感觉打印整个 json 有点慢。不使用 getWriter().print,而是以任何方式打印 json

标签: java json jsp servlets service


【解决方案1】:

这取决于您检索数据的方式以及您的 JSON 序列化程序是否有可用的流式处理 API。

目前您可能分三个单独的步骤进行操作

  1. 检索所有数据
  2. 将其序列化为 JSON 字符串
  3. 编写 JSON 响应。

如果您自己花费大量时间在检索和序列化部分上,那么您可以通过使用流来加快速度。但是,这需要您的数据检索和 json 序列化程序来支持流。

使用流时,您基本上不是按顺序执行所有操作,而是设置一个管道,让您可以更早地开始编写响应。但是,这并不能保证更快,这取决于您的特定瓶颈发生在哪里。如果对客户端的 IO 几乎都是问题,那么您不会看到实质性差异。

还有

其他需要调查的事情是检查您是否正在压缩您对用户的响应。 Gzip 会对文本数据的大小产生重大影响,并且可能会充分减少您的有效负载,从而使这成为问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多