Hi Reinhard,
At my end, this works best:
function io.readall(f)
local size = f:seek("end")
if size == 0 then
return ""
elseif size < 1024*1024 then
f:seek("set",0)
return f:read('*all')
else
local done = f:seek("set",0)
if size < 1024*1024 then
step = 1024 * 1024
elseif size > 16*1024*1024 then
step = 16*1024*1024
else
step = math.floor(size/(1024*1024)) * 1024 * 1024 / 8
end
local data = { }
while true do
local r = f:read(step)
if not r then
return table.concat(data)
else
data[#data+1] = r
end
end
end
end
usage:
local f = io.open(name)
if f then
data = io.readall(f)
f:close()
end
upto 50% faster and often less mem usage
Hans
-----------------------------------------------------------------
Hans Hagen | PRAGMA ADE
Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
| www.pragma-pod.nl
-----------------------------------------------------------------
_______________________________________________
dev-luatex mailing list
[email protected]
http://www.ntg.nl/mailman/listinfo/dev-luatex