我应该通过一个读/写或多个块的套接字发送文件吗?

gin*_*007 2 c++ sockets ftp

我有一个关于如何在c ++中实现基本文件传输client\server的基本问题.

我不确定为什么在一个read\write中发送文件不是一个好方法,为什么好的方法是将它发送到一小块缓冲区呢?

Ste*_*ich 5

我不确定为什么在一个read\write中发送文件不是一个好方法,为什么好的方法是将它发送到一小块缓冲区呢?

如果你有一个大小为2TB的文件,你首先需要分配这个数量的RAM并将整个文件加载到这个单个缓冲区中.然后你需要写出所有这个缓冲区.无论如何,由于内存不足,这可能无法成功使用2TB文件,但即使对于较小的文件,这也会浪费资源.由于从磁盘读取和对网卡的写入在内部完成,无论如何,即使整个文件适合RAM,也不会获得更好的性能.

一个可能的妥协可能是读取/写入4k到32k之间的块,最佳大小取决于操作系统,磁盘缓冲区,套接字缓冲区,磁盘速度和网络等.