gpt4 book ai didi

java - servlet 中输入/输出流的性质

转载 作者:行者123 更新时间:2023-11-30 11:31:42 25 4
gpt4 key购买 nike

我能够通过输入流从请求对象中提取内容。因此,如果它是流,是否意味着数据正在通过 os->webcontainer->etc 等从客户端“实时”传输到 servlet?

如果我在请求中传递大量数据,它是缓存在 OS/JVM 的某个地方还是直接从实时源中读取?我可以打开请求 inputStream 到 tera/peta 字节的数据,然后将它逐字节写入输出流而不会出现任何问题(忽略所需的时间和超时)吗?

更新 如果它们被缓存,为什么它们是流?打开后只能读取一次(并且需要存储),相反,它们应该可以根据需要多次读取。

只是随机查询,没有实际用途。

最佳答案

它们没有被缓存。如果某些内容已被缓存,则可以重新使用。然而,这些流是不可重用的,因此绝对不会被缓存。

但是,它们很可能缓冲在内存中,甚至在本地磁盘文件系统而不是内存中。这完全取决于服务器实现甚至底层操作系统(也称为“虚拟磁盘”或“交换磁盘”,具体取决于所使用的操作系统)。然而,这个缓冲区通常没有兆字节的数量级那么大。例如,标准的 Java SE BufferedInputStream 类有一个 8KB 的内部缓冲区。

Can I open a request inputStream to tera/peta bytes of data, and write it to an outputstream byte by byte without any problems (ignoring the amount of time it would take and time outs) ?

您可能会达到通常可在服务器上配置的 HTTP POST 大小限制。这在例如 Tomcat 中默认为 2GB,但可以完全禁用。另请参阅 the HTTP connector 上的 maxPostSize 设置.

关于java - servlet 中输入/输出流的性质,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17032731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com