高效的可变字节数组,可用于本地 Lua。

我正在尝试在原生Lua中制作一个高效的LZ77解码器(即没有C库,并且没有依赖于非核心Lua库)-请参见[liblzg](http://liblzg.bitsnbites.eu)。

对于加载和解析二进制文件,Lua字符串完美地工作,并具有良好的性能(例如使用s:byte(k)方法)。但是,对于创建解码后的输出数据,字符串并不是很优化,因为它们是不可变的,并且当输出变得很大时,字符串连接会花费很多时间。

解码器必须能够:

  • 一次将一个字节附加到输出(多达数百万次)
  • 从输出缓冲区读取(更或多或少地随机访问)

最好的选择是什么?输出数据的大小是预先知道的,因此可以预先分配。

原文链接 https://stackoverflow.com/questions/4265952

点赞
stackoverflow用户107090
stackoverflow用户107090

避免字符串拼接:将输出字符串保存到表中,并在最后一次性写入所有字符串。如果你担心表会变得太大,可以定期刷新它。

参见http://www.lua.org/pil/11.6.html

2010-11-24 10:58:37
stackoverflow用户282536
stackoverflow用户282536

听起来 table.concat 是个完美的工具,你的输出仅仅是一个字节表。

当你需要复制时,可以按照普通的表格复制方式进行操作,例如:

for i=#output-5,9 do output[#output+1]=output[i] end

当你最终完成了输出流的操作后,可以使用 str=table.concat(output) 将其转换成字符串。

2010-11-24 18:52:55