我试图在本机Lua中有效地实现LZ77解码器(即没有C库,并且不依赖于非核心Lua库) - 请参阅liblzg.
对于加载和解析二进制文件,Lua字符串工作正常,性能良好(例如使用s:byte(k)方法).但是,为了创建解码的输出数据,字符串不是非常优化,因为它们是不可变的,并且当输出变大时,字符串连接往往需要花费大量的时间.
解码器必须能够:
什么是最好的选择?输出数据的大小是预先知道的,因此可以预先分配.
听起来像table.concat
输出的完美工作只是一个字节表.
当您需要复制时,您可以按照通常的方式进行复制.例如:
for i=#output-5,9 do output[#output+1]=output[i] end
Run Code Online (Sandbox Code Playgroud)
当您最终完成输出流时,将其转换为带有的字符串 str=table.concat(output)