рдПрдХ рдХрд╛рд░реНрдп:
рдЗрдВрдЯрд░рдиреЗрдЯрд╢рд┐рд╡рд╛рдп рдПрдХ рдкреАрд╕реА рдЖрд╣реЗ, рдкрд░рдВрддреБ USB рджреНрд╡рд╛рд░реЗ рдлрд╛рдЗрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ. рдЗрдВрдЯрд░рдиреЗрдЯрд╕рд╣ рдПрдХ рдЯреЕрдмрд▓реЗрдЯ рдЖрд╣реЗ рдЬрд┐рдереВрди рд╣реА рдлрд╛рдЗрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рдЯреЕрдмрд▓реЗрдЯрд╡рд░ рдЖрд╡рд╢реНрдпрдХ рдЯреЙрд░реЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рддреЗрдереЗ рдкреБрд░реЗрд╢реА рдореЛрдХрд│реА рдЬрд╛рдЧрд╛ рдирд╛рд╣реА. рдЯреЛрд░реЗрдВрдЯрдордзреАрд▓ рдлрд╛рдЗрд▓ рдПрдХ рдЖрдгрд┐ рдореЛрдареА рдЖрд╣реЗ.
рд╕рдорд╛рдзрд╛рдирд╛рдЪрд╛ рдорд╛рд░реНрдЧ:
рдореА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯреЙрд░рдВрдЯ рд╕реБрд░реВ рдХреЗрд▓рд╛. рдЬреЗрд╡реНрд╣рд╛ рдореЛрдХрд│реА рдЬрд╛рдЧрд╛ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдВрдкрд▓реА рддреЗрд╡реНрд╣рд╛ рдореА рдбрд╛рдЙрдирд▓реЛрдбрд▓рд╛ рд╡рд┐рд░рд╛рдо рджрд┐рд▓рд╛. рдореА рдЯреЕрдмрд▓реЗрдЯрд▓рд╛ PC рд▓рд╛ рдЬреЛрдбрд▓реЗ рдЖрдгрд┐ рдЯреЕрдмреНрд▓реЗрдЯрд╡рд░реВрди PC рд╡рд░ рдлрд╛рдЗрд▓ рд╣рд▓рд╡рд▓реА. рдореА рд╡рд┐рд░рд╛рдо рджрд┐рд▓рд╛ рдЖрдгрд┐ рдорд╛рдЭреНрдпрд╛ рдЖрд╢реНрдЪрд░реНрдпрд╛рдиреЗ рдлрд╛рдИрд▓ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдЭрд╛рд▓реА рдЖрдгрд┐ рдЯреЙрд░рдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдд рд░рд╛рд╣рд┐рд▓рд╛ рдЬрдгреВ рдХрд╛рд╣реА рдШрдбрд▓реЗрдЪ рдирд╛рд╣реА.
рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдпрдВрдЯ рдЬреНрдпрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рддреЛ рддреНрдпрд╛ рдлрд╛рдИрд▓рд╡рд░ рд╡рд┐рд░рд│ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рддреЛ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдореБрд│реЗ, рд╕рд┐рд╕реНрдЯрдо рдПрдХрд╛рдЪ рд╡реЗрд│реА 16GB рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдирд╛рд╣реА рдЖрдгрд┐ 4GB рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдлрд╛рдЗрд▓рд╡рд░ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдирд╛ рддреНрд░реБрдЯреА рдЙрджреНрднрд╡рдгрд╛рд░ рдирд╛рд╣реА.
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд░ рд╡реЗрд│рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдорд▓рд╛ рдорд╛рдЭреНрдпрд╛ PC рд╡рд░ рдПрдХрд╛рдЪ рдЯреЙрд░реЗрдВрдЯрдЪреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рднрд╛рдЧ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЪрд╛рд░ рдлрд╛рдпрд▓реА рдорд┐рд│рд╛рд▓реНрдпрд╛. рдЖрддрд╛ рдлрдХреНрдд рддреНрдпрд╛рдВрдирд╛ рдПрдХрддреНрд░ рдареЗрд╡рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореВрд▓рдд: рд╕реЛрдкреА рдЖрд╣реЗ. рдЬрд░ рдЪрд╛рд░ рдлрд╛рдпрд▓реАрдВрдкреИрдХреА рдПрдХрд╛ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд╛рдирд╛рд╡рд░ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯреНрд╕ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рддреАрд▓ рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рджреБрд╕рд░реНтАНрдпрд╛ рдореВрд▓реНрдпрд╛рд╕рд╣ рдмрджрд▓рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ.
рдорд▓рд╛ рдЕрд╕реЗ рд╡рд╛рдЯрд▓реЗ рдХреА рдЗрддрдХрд╛ рд╕рд╛рдзрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдЕрд╕рд╛рд╡рд╛. рдЕрд╢реА рд╕рдорд╕реНрдпрд╛ рдХреЛрдгрд╛рд▓рд╛рдЪ рдЖрд▓реА рдирд╛рд╣реА рдХрд╛? рдкрдг рдорд▓рд╛ рдХрд│рд▓реЗ рдХреА рдорд▓рд╛ рддреЗ рд╢реЛрдзрд╛рдпрдЪреЗ рдХреАрд╡рд░реНрдб рджреЗрдЦреАрд▓ рдорд╛рд╣рд┐рдд рдирд╛рд╣реАрдд. рдореНрд╣рдгреВрди, рдореА рдпрд╛ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рддреНрд╡рд░реАрдд рд▓реБрдЖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдпрд╛рд░ рдХреЗрд▓реА рдЖрдгрд┐ рдЖрддрд╛ рдореА рддреА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реА рдЖрд╣реЗ. рд╣реЗ рдорд▓рд╛ рд╢реЗрдЕрд░ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ.
рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдЯреЙрд░реЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдд рдЖрд╣реЗ
- рдкрд╣рд┐рд▓реНрдпрд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╡рд░ рдЯреЙрд░реЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ рд╕реБрд░реВ рдХрд░рд╛
- ROM рднрд░реЗрдкрд░реНрдпрдВрдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛
- рдбрд╛рдЙрдирд▓реЛрдб рдерд╛рдВрдмрд╡рд╛
- рдлрд╛рдИрд▓ рджреБрд╕рд░реНтАНрдпрд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╡рд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рдлрд╛рдИрд▓рдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░ рдПрдХ рдирдВрдмрд░ рдЬреЛрдбрд╛
- рдлрд╛рдЗрд▓ рдкреВрд░реНрдгрдкрдгреЗ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдИрдкрд░реНрдпрдВрдд рдЖрдореНрд╣реА рдкрд╣рд┐рд▓реНрдпрд╛ рдмрд┐рдВрджреВрд╡рд░ рдкрд░рдд рдпреЗрдК
рдПрдХрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рднрд╛рдЧ рд╡рд┐рд▓реАрди рдХрд░рдгреЗ
рд╢реЗрд╡рдЯрдЪрд╛ рднрд╛рдЧ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рддреЗ рдПрдХрд╛ рд╕рдВрдкреВрд░реНрдг рдлрд╛рдИрд▓рдордзреНрдпреЗ рдЧреЛрд│рд╛ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рдХрд╛рд░реНрдп рд╕реЛрдкреЗ рдЖрд╣реЗ:
- рд╕рд░реНрд╡ рднрд╛рдЧ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╡рд╛рдЪрддреЛ
- рдЬрд░ рдХрд╛рд╣реА рднрд╛рдЧрд╛рдд рдкреЛрдЭрд┐рд╢рди рдЭрд┐рд░реЛ рдмрд╛рдЗрдЯ рдирд╕реЗрд▓ рддрд░ рдЖрдкрдг рддреЗ рдЖрдЙрдЯрдкреБрдЯрд╡рд░ рд▓рд┐рд╣реВ, рдЕрдиреНрдпрдерд╛ рд╢реВрдиреНрдп рд▓рд┐рд╣реВ.
рдХрд╛рд░реНрдп merge_part
рдереНрд░реЗрдбреНрд╕рдЪрд╛ рдЕреЕрд░реЗ рд╕реНрд╡реАрдХрд╛рд░рддреЛ streams_in
рдЬреНрдпрд╛рдЪрд╛ рдЖрдХрд╛рд░рд╛рдЪрд╛ рдПрдХ рднрд╛рдЧ рд╡рд╛рдЪрддреЛ buffer_length
рдЖрдгрд┐ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдереНрд░реЗрдбреНрд╕рдордзреАрд▓ рднрд╛рдЧ рд╡рд┐рд▓реАрди рдХреЗрд▓реНрдпрд╛рдЪреЗ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╡рддреЗ.
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
--[[
рдХрд╛рд░реНрдп string.gsub
рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрд╣реЗ рдХрд╛рд░рдг рддреЗ рд╢реВрдиреНрдпрд╛рдиреЗ рднрд░рд▓реЗрд▓реЗ рддреБрдХрдбреЗ рд╢реЛрдзреВрди рддреНрдпрд╛рд╕ рдЬреЗ рджрд┐рд▓реЗ рдЖрд╣реЗ рддреЗ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрд▓.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- ╨╜╨╡ ╨╜╨░ ╤З╤В╨╛ ╨╝╨╡╨╜╤П╤В╤М
end
--[[
string.gsub
рд╕рд╛рдордирд╛ рдХреЛрдгрддреНрдпрд╛ рд╕реНрдерд╛рдирд╛рд╡рд░ рдЖрдврд│рд▓рд╛ рддреЗ рд╡реНрдпрдХреНрдд рдХрд░рдд рдирд╛рд╣реА. рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рд╕реНрдерд╛рдирд╛рд╕рд╛рдареА рд╕рдорд╛рдВрддрд░ рд╢реЛрдз рдХрд░рддреЛ zero_string
рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди string.find
. рдкреНрд░рдердо рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рд╢реЛрдзрдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ.
--]]
local start_index = out_part:find(" ", find_index, true)
find_index = start_index + #zero_string
--[[
рдЖрддрд╛ рдЬрд░ рдордзреНрдпреЗ in_part
рд╕рд╛рдареА рдбреЗрдЯрд╛ рдЖрд╣реЗ out_part
рддреНрдпрд╛рдВрдЪреА рдХреЙрдкреА рдХрд░рд╛.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
рдкрд╛рд╕реВрди рдХрдЯ in_part
рд╢реВрдиреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд░рдорд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рдЧ.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
╨Т part
рдбреЗрдЯрд╛ рдЖрд╣реЗ.
--]]
if #part == #zero_string then
return part
else
--[[
part
рд╢реВрдиреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ. рдЪрд▓рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╣ рдкреВрд░рдХ рдХрд░реВрдпрд╛.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЖрдореНрд╣реА рд╣реА рдлрд╛рдЗрд▓ рдкреАрд╕реАрд╡рд░ рдбрд╛рдЙрдирд▓реЛрдб рдЖрдгрд┐ рдПрдХрддреНрд░ рдХрд░реВ рд╢рдХрд▓реЛ. рд╡рд┐рд▓реАрдиреАрдХрд░рдгрд╛рдирдВрддрд░, рдореА рдЯреЕрдмрд▓реЗрдЯрдордзреВрди рдЯреЙрд░реЗрдВрдЯ рдлрд╛рдЗрд▓ рдмрд╛рд╣реЗрд░ рдХрд╛рдврд▓реА. рдореА рдорд╛рдЭреНрдпрд╛ PC рд╡рд░ рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдпрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓рд╛ рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╣ рдлрд╛рдЗрд▓ рддрдкрд╛рд╕рд▓реА.
рдЯреЕрдмреНрд▓реЗрдЯрд╡рд░реАрд▓ рд╢реЗрд╡рдЯрдЪрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗрд▓рд╛ рднрд╛рдЧ рд╡рд┐рддрд░рдгрд╛рд╡рд░ рд╕реЛрдбрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдкрд░рдВрддреБ рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛рдЖрдзреА рднрд╛рдЧрд╛рдВрдЪреА рд░реА-рдЪреЗрдХрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдлрд╛рдЗрд▓ рдкреБрдиреНрд╣рд╛ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА рдореНрд╣рдгреВрди рдЕрдирдЪреЗрдХ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рд╡рд╛рдкрд░рд▓реЗрд▓реЗ:
- рдЯреЕрдмреНрд▓реЗрдЯрд╡рд░ рдлреНрд▓рдб рдЯреЙрд░реЗрдВрдЯ рдХреНрд▓рд╛рдпрдВрдЯ.
- PC рд╡рд░ рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдпрдВрдЯ qBittorent.
рд▓реБрдЖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рд╕реНрддреНрд░реЛрдд: www.habr.com