如何在收到一定数量的数据后写入文件?
我知道文件可以打开,然后可以使用file:pwrite(Position,Bin)写入。
我想知道的是,如果数据是正在下载并需要写入文件。如何有效地做到这一点?例如使用缓冲区(如何写入缓冲区?)
此外,文件是否一直保持打开状态,直到下载完成或者每次到达缓冲区并且需要写入数据时它是否打开?
由于
答案 0 :(得分:2)
如果您希望erlang为您缓存文件写入,则可以使用{delayed_write, Size, Delay}
选项打开文件。然后你可以随心所欲io:write
,当缓冲区达到Size
字节或Delay
毫秒后,VM将负责将这些请求批量处理到一个OS写入调用中因为缓冲区开始填满。
这种方法允许您在每次从网络接收数据时发出io:write
个调用,但知道您不会为每个字节发出系统调用(如果您确实遇到了病态网络行为)。
答案 1 :(得分:1)
最有效的方法是将数据附加到内存缓冲区(IO列表?)并在一次操作中将其写入文件。如果您希望打开文件并写入每个数据块,则可以在append
模式下打开该文件:
> file:write_file(FileName, DataToWrite, [append]).
每次写入都会将数据附加到文件的末尾。
答案 2 :(得分:0)
我认为file:pwrite/3
符合您的需求。