Java中的HttpServer流请求体

时间:2013-10-11 14:34:43

标签: java http networking request streaming

对于我来说,在我读取请求主体之前存储所有数据是非常有趣的。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

TCP通常的工作方式就像接收方回复发件人那样“好了,得到它,现在发送下一部分” - 也称为ACK数据包。此机制也可以将传输速度调整为连接速度(而不是过快地发送数据并导致数据包丢失)。

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