ProHoster > Blog > Stjórnsýsla > Að hlaða niður 16GB straumi í gegnum spjaldtölvu með 4GB af lausu plássi
Að hlaða niður 16GB straumi í gegnum spjaldtölvu með 4GB af lausu plássi
Verkefni:
Það er tölva án internets, en það er hægt að flytja skrána í gegnum USB. Það er spjaldtölva með internetinu sem hægt er að flytja þessa skrá frá. Þú getur halað niður tilskildum straumi á spjaldtölvuna þína, en það er ekki nóg pláss. Skráin í straumnum er ein og stór.
Leið að lausn:
Ég byrjaði á straumnum til að sækja. Þegar laust plássið var næstum horfið gerði ég hlé á niðurhalinu. Ég tengdi spjaldtölvuna við tölvuna og færði skrána úr spjaldtölvunni yfir á tölvuna. Ég gerði hlé og mér til undrunar var skráin búin til aftur og straumurinn hélt áfram að hlaða niður eins og ekkert hefði í skorist.
Vegna þess að torrent biðlarinn setur sparse flagið á skrána þar sem hann skrifar móttekin gögn, reynir kerfið ekki að panta 16GB í einu og villa mun ekki koma upp þegar reynt er að skrifa í skrá sem er lengra en 4GB.
Eftir að hafa endurtekið ferlið fjórum sinnum fékk ég fjórar skrár á tölvuna mína sem innihéldu mismunandi hluta af sama straumnum. Nú er bara eftir að setja þau saman. Aðferðin er í meginatriðum einföld. Þú þarft að skipta út núllbætunum fyrir annað gildi ef það er til á tilteknum stað í einni af fjórum skrám.
Mér fannst svo einfalt forrit eiga að vera á netinu. Hefur enginn lent í slíku vandamáli? En ég áttaði mig á því að ég veit ekki einu sinni hvaða leitarorð ég á að leita að því. Þess vegna bjó ég fljótt til Lua handrit fyrir þetta verkefni og nú hef ég fínstillt það. Þetta er það sem ég vil deila.
Að sækja strauminn í hlutum
byrjaðu að hlaða niður straumnum á fyrsta tækinu
bíddu þar til ROM er fyllt
gera hlé á niðurhalinu
flytja skrána í annað tækið og bæta númeri við skráarnafnið
við snúum aftur að fyrsta punktinum þar til skránni er hlaðið niður alveg
Sameina hluta í eina skrá
Eftir að síðasti hlutinn hefur borist er nauðsynlegt að safna þeim í eina heila skrá.
Verkefnið er einfalt:
Að lesa alla hluta í einu
Ef staðan er í einhverjum hluta ekki núllbæti, þá skrifum við það í úttakið, annars skrifum við núll
Virka merge_part tekur við fjölda þráða streams_in þar af er hluti af stærð buffer_length og skilar niðurstöðu sameiningar hluta úr mismunandi þráðum.
function merge_part(streams_in, buffer_length)
local out_part
for _, stream in ipairs(streams_in) do
local in_part = stream:read(buffer_length)
if not out_part then
out_part = in_part -- просто копируем часть из первого файла
elseif in_part and #in_part > 0 then
if #out_part < #in_part then
out_part, in_part = in_part, out_part
end
if out_part ~= in_part -- данные различаются
and in_part:find("[^ ]") -- есть данные в in_part
and out_part:find(" ", 1, true) -- есть пустые места в out_part
then
local find_index = 1
--[[
Virka string.gsub hentar fyrir verkefnið vegna þess að það finnur stykki fyllt með núllum og skilar því sem því er gefið.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub gefur ekki til kynna hvar samsvörun fannst. Þess vegna gerum við samhliða leit að stöðunni zero_string með því að nota aðgerðina string.find. Það er nóg að finna fyrsta núllbætið.
Nú ef inn in_part það eru gögn fyrir out_part afrita þá.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
Klippt úr in_part hluti sem samsvarar röð núllanna.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part það eru gögn.
--]]
if #part == #zero_string then
return part
else
--[[
part reyndist vera minni en röð af núllum. Við skulum bæta það með þeim.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
Ályktun
Þannig gátum við hlaðið niður og sett þessa skrá saman á tölvu. Eftir sameininguna dró ég torrentskrána úr spjaldtölvunni. Ég setti upp torrent biðlara á tölvunni minni og athugaði skrána með honum.
Síðasta niðurhalaða hlutann á spjaldtölvunni er hægt að skilja eftir á dreifingunni, en þú þarft að virkja endurskoðun á hlutunum fyrir þetta og taka hakið úr skránni svo hún hleðst ekki niður aftur.