【发布时间】:2013-06-06 15:08:56
【问题描述】:
我能够通过输入流从请求对象中提取内容。因此,如果它是一个流,是否意味着数据正在通过 os->webcontainer->etc 等从客户端“实时”传输到 servlet?
如果我在请求中传递大量数据,它是缓存在 OS/JVM 的某处还是直接从源实时读取?我可以打开请求 inputStream 到 tera/peta 字节的数据,并将其逐字节写入输出流而没有任何问题(忽略它所花费的时间和超时)吗?
更新如果它们被缓存,为什么它们是流式传输的?打开后只能读取一次(并且需要存储),而应该可以根据需要多次读取。
只是随机查询,没有实际用途。
【问题讨论】:
-
例如,对于 Tomcat:stackoverflow.com/questions/2943477/…
-
有趣;但是离开供应商特定的实现,输入/输出的性质是什么?它们最终会在某个级别缓存吗?如果是这样,为什么它们是流媒体?只能读取一次。如果被缓存,我们可以一次又一次地重读它们
-
nature 没有被“Sun/Oracle servlets spec”指定(你可以用谷歌搜索它,然后尝试找到任何关于底层实现的提及。——没有)。我想,这些只是通过 single TCP 连接传递的数据,因此没有显式缓存(也许,只有在巨大的 POST 查询不完全适合 RAM 的情况下,操作系统才会进行隐式页面交换)
-
然后,您可以随时查看 Tomcat/Jetty/whatever 源代码内部并亲自查看。但是,最有可能的是,它只是一个单独的 TCP 连接,没有显式缓存。
-
@VictorSorokin 谢谢 :) 我要试试看能否逐字节传输 100MB 文件
标签: java jakarta-ee servlets web-applications web