Java在传输百万数量级别的小文件(10K-2M)时有什么比较高效的解决方案吗?

百万级别的小文件传输会因为IO瓶颈导致效率及其低下,个人水平有限,目前想不到有什么解决方案。
比如1TB这样的小文件通过局域网从a机器传输到b机器。

这个其实永远是一个问题,其实你可以换一个思路,就是先本地打包,再传输,在接收端解包。

因为本地打包要传输的文件,虽然额外占用了很多本地IO资源,但本地IO和网络IO的延迟完全不是一个数量级的事情,这样再传一个文件,再接收端解包这样分成3步的总时间,也比远程直接传快很多很多的。

这其实类似现在在web服务中普遍采用集中打包出1个大的js、css文件,让客户端减少链接请求的思路。

开一个TCP连接,所有小文件通过这一个连接发送出去。不要每发一个文件就建立一个连接,连接的建立和销毁会影响效率。
如果嫌一个连接太慢,可以开启多个线程,每个线程维护一个连接,但线程不要开多了,IO密集型的情况下线程数设为CPU核数就可以了。