4

在我读取请求正文之前,所有数据都存储在其中,这对我来说非常有趣。

例如,一个文件正在上传到服务器。Java 程序接收此文件。如果文件非常大 - 100 GB,则不可能将整个文件内容存储在缓冲区中。

Java 是否从远程计算机流式传输此文件?我的意思是远程计算机发送一小部分数据,Java 接收这部分并等待下一部分。当远程计算机决定服务器读取第一部分时,它会发送第二部分数据,依此类推。

Java 及其HttpServer以这种方式工作还是像 Apache+PHP 那样将整个文件存储在磁盘上?

4

1 回答 1

1

您正在寻找的机制是由操作系统的 TCP 堆栈实现的。发送端和接收端都使用缓冲区。

TCP 通常的工作方式就像接收机器回复发送方“好的,明白了,现在发送下一部分” ——也称为 ACK 数据包。这种机制还可以根据您的连接速度调整传输速度(而不是发送数据太快而导致数据包丢失)。

这是一台运转良好的机器,但如果出现问题,通常会通过 TIMEOUT 来表现。(在您的示例中,如果您在处理请求正文之前等待了很多时间,而不是读取,则发送机器将放弃)。

于 2013-12-18T12:46:34.190 回答