据我了解,支持流式 I/O 的程序可以处理大于内存大小的文件。它是否正确?
有没有办法知道哪些程序支持流I/O?
答案1
如果程序支持流式 I/O,它可以处理超过内存大小的文件,这是正确的吗
通常是的,但不一定。想象一个程序,类似uniq
但更复杂,它计算输入中每个唯一行的出现次数。与此不同的是uniq
,它输出迄今为止出现的事件总数。因此,它算作流式传输,因为它在接收输入时增量地产生输出。但是,如果输入的每一行都是唯一的或接近的,则它必须记住数据结构中的每个不同行以维护运行计数,并且它实际上无法处理大于内存的文件。
还有办法知道哪些程序支持流式 I/O 吗?
除非有文档记录或者您可以自己验证,否则不会,因为这取决于程序的作用。
不过,您可以做一些接近的事情:您可以测试程序是否需要可查找的输入文件。有些程序接受管道或常规文件(或套接字或其他文件)作为输入。其他人只能接受常规文件。如果一个程序坚持使用常规的、可查找的文件,那么它很可能不会进行任何类型的流式传输。如果它允许管道作为输入,那么它很有可能会这样做。但也有例外。例如,sort
允许管道作为其输入,但它不进行流式传输:它仅在输入结束后输出任何内容。