【发布时间】:2012-10-23 18:31:11
【问题描述】:
我有一个应用程序,我通过 LuaSockets 从网络 (500KB) 获取大量二进制数据。 (还没有实现这部分)。根据我所知道的,这些数据将存储在某种字符串或表或数组中。
我需要对这些数据进行复杂处理,并且我有一个现有的、经过验证的 ANSI-C Lib,我需要将数据传递给 C。我研究过的方法通常在调用堆栈中传递数据由于数据大小,对我不起作用。
现有的 ANSI-C 库需要一个指向数据和大小的指针。我可能可以用一个新的 API 包装这个 API,它逐字节地排除数据,最后一旦确定了整个大小,就调用真正的 API,但这意味着从 Lua 对某些 C 函数的大量调用,而不是首选,因为我想要性能.
将这些大数据传递给 C 的最佳方法是什么? (我考虑过写入文件并传递文件名,但这不是首选,我真的想要直接内存传递)
【问题讨论】:
-
"据我所知,这些数据将存储在某种字符串或表或数组中。" 它是什么?这是 3 种完全不同的东西。
-
@NicolBolas 这本身就是另一个问题 Nicol。 Lua的类型不是很严格,我基本不知道。但根据我阅读的内容,它似乎已连接:receive([size]) 以字符串格式返回数据报。
-
请注意,虽然 LuaSocket 确实在 Lua 字符串中传递二进制数据(顺便说一句,这是完全支持和推荐的做法),但它不能保证任何特定的调用都会产生整个数据报。此外,如果您要移动 500KB,它肯定不会收集那么大的缓冲区以在一次调用中返回。您将希望从
receive()返回的字符串逐步构建数据主体。一种好方法是将它们收集在一个表中并将整个表传递给 C 端。