我正在尝试在本机Lua中有效实现LZ77解码器(即没有C库,并且不依赖于非核心Lua库) - 请参阅liblzg。
为了加载和解析二进制文件,Lua字符串工作正常,性能良好(例如使用s:byte(k)方法)。但是,为了创建解码的输出数据,字符串不是最优的,因为它们是不可变的,并且当输出变大时,字符串连接往往需要花费大量的时间。
解码器必须能够:
最好的选择是什么?输出数据的大小是预先知道的,因此可以预先分配。
答案 0 :(得分:11)
避免字符串连接:将输出字符串保存到表中并在结尾处写入其中的所有字符串。如果您担心桌子太大,请定期冲洗。 见http://www.lua.org/pil/11.6.html
答案 1 :(得分:9)
听起来像table.concat
的完美工作
你的输出只是一个字节表。
当您需要复制时,您可以按照通常的方式进行复制。 例如:
for i=#output-5,9 do output[#output+1]=output[i] end
当您最终完成输出流时,将其转换为带有str=table.concat(output)