用java';getOutputStream';或';getWriter';

用java';getOutputStream';或';getWriter';,java,json,jsp,servlets,service,Java,Json,Jsp,Servlets,Service,这个场景就像我需要打印非常大的json数据集。此json数据由移动应用程序的用户使用。在Java服务应用程序中,如下所示用于打印json response.getWriter().println(mainjson); getWriter打印所有数据花费了太多时间 我还听说了getOutputStream。对于大型json数据,哪一种更快? 任何帮助都将不胜感激:-)这取决于您检索数据的方式以及JSON序列化程序是否有可用的流式api 目前,您可能正在分三个独立的步骤进行操作 检索所有数据 将其

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

response.getWriter().println(mainjson);
getWriter打印所有数据花费了太多时间

我还听说了
getOutputStream
。对于大型json数据,哪一种更快?
任何帮助都将不胜感激:-)

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

目前,您可能正在分三个独立的步骤进行操作

  • 检索所有数据
  • 将其序列化为JSON字符串
  • 编写JSON响应
  • 如果您自己在检索和序列化部分上花费了大量时间,那么您可以通过使用流来潜在地提高速度。但是,这需要数据检索和json序列化程序来支持流

    使用streams时,基本上不需要按顺序步骤进行所有操作,而是设置一个管道,允许您更早地开始编写响应。但这并不能保证速度会更快,这取决于特定瓶颈发生的位置。如果这几乎都是客户端IO的问题,那么您不会看到实质性的差异

    同时


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

    编写器只是包装输出流。因为json是基于文本的,所以这是正确的方法。我认为真正的问题是“getWriter花费太多时间”意味着什么?对于真正的大数据来说也是如此。为什么不将其分块加载,并在向下或向下滚动时加载每个块something@f1sh是的,getWriter花了太多时间。“他们有办法缩短时间吗?”阿努拉杰打电话给Writer.write,这几乎不会花太多时间。是什么让你认为是使用编写器占用了处理时间?@f1sh在打印如此大的json数据时,感觉打印整个json有点慢。他们没有使用getWriter().print,而是使用任何方式来打印json吗