【发布时间】:2015-11-16 18:27:50
【问题描述】:
我有一个文件太大,我无法一次将其读入字符串,但必须使用缓冲:
$fp = @fopen("bigfile", 'rb');
while (!feof($fp)) {
//process buffer
}
为简单起见,假设文件包含一系列整数字符串对,其中整数保存字符串的长度。然后我想在process buffer 中实现的代码,是unpack 一个int,从缓冲区中读取那么多字符,然后重复。
对于处理字符串跨越一个缓冲区到下一个缓冲区的情况,我很感激任何建议。我确信这个问题一定已经解决了,并且有一个设计模式,我只是不知道从哪里开始。
任何帮助将不胜感激。
【问题讨论】:
-
检测何时有跨度,将“开始块”从您读取的最后一个块的末尾剥离,并将您从文件中读取的 var 与该块“填充”。例如
while($chunk .= fread(...)) { ...do stuff... if (have partial) { $chunk = get_last_partial(); } else { $chunk = ''; } }这样你只需将下一个块附加到前一个块的左边,消除分裂。