中间件返回文件数据时,ReadableStream为何优于Buffer?
为什么ReadableStream比Buffer更适合处理文件上传?
内存占用可控:Buffer会把整个文件的所有字节一次性加载到内存中,文件越大,内存占用越高,甚至可能触发内存溢出。而ReadableStream是分段读取、分段处理,每次仅加载一小段数据(比如几KB到几十KB)到内存,处理完成后就释放这部分内存,内存占用始终维持在低水平,不会随文件大小线性增长。
支持异步流式处理:你可以在数据还没完全接收完毕时就开始处理(比如边接收边写入磁盘、边解析内容),无需等待整个文件加载完成。比如用busboy配合流时,接收到部分文件数据就可以直接通过
pipe写入文件流,不用等所有数据攒成Buffer再处理,响应速度更快。避免内存浪费:用Buffer处理大文件时,内存会一直保留整个文件的副本,直到处理完成才释放。而流处理时,每段数据处理完就会被垃圾回收机制回收,不会占用额外内存空间。
你提到“流也需要将所有底层数据存储在内存中”是误解——流并不会把所有数据存在内存里,它是从数据源(比如HTTP请求的底层连接)按需读取,处理一段就丢弃一段,只有当前正在处理的那一小段数据会暂存在内存中。
内容的提问来源于stack exchange,提问作者Mr. X
相关产品推荐
相关产品推荐

