我能够通过输入流从请求对象中提取内容。因此,如果它是一个流,它是否意味着数据正在被转移'现场'从客户端到servlet通过os-> webcontainer->等等?
如果我在请求中传递了大量数据,它是否会在OS / JVM的某处缓存,或者是否直接从源实时读取?我可以打开一个请求inputStream到tera / peta字节的数据,并逐字节地将它写入输出流而没有任何问题(忽略它需要的时间和超时)?
更新如果他们正在缓存,他们为什么会流?一旦打开,它只能被读取一次(并且需要存储),而应该可以根据需要多次读取它们。
随机查询,没有实际用途。
答案 0 :(得分:1)
他们没有被缓存。如果某些内容已被缓存,则可以重复使用。然而,这些流不可重用,因此绝对不会被缓存。
然而,它们很可能是缓冲在内存中,甚至在本地磁盘文件系统而不是内存上。这完全取决于服务器实现甚至底层操作系统(也称为“虚拟磁盘”或“交换磁盘”),具体取决于所使用的操作系统。然而,该缓冲区通常不如兆字节的数量级那么大。例如,标准Java SE BufferedInputStream
类具有8KB的内部缓冲区。
我可以打开一个请求inputStream到tera / peta字节的数据,并逐字节地将它写入输出流而没有任何问题(忽略它需要的时间和超时)?
您可能会遇到HTTP POST大小限制,该限制通常可在服务器上配置。默认情况下,例如Tomcat为2GB,但可以完全禁用。另请参阅the HTTP connector上的maxPostSize
设置。