16GB рдореЛрдХрд│реНрдпрд╛ рдЬрд╛рдЧреЗрд╕рд╣ рдЯреЕрдмреНрд▓реЗрдЯрджреНрд╡рд╛рд░реЗ 4GB рдЯреЙрд░реЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ

16GB рдореЛрдХрд│реНрдпрд╛ рдЬрд╛рдЧреЗрд╕рд╣ рдЯреЕрдмреНрд▓реЗрдЯрджреНрд╡рд╛рд░реЗ 4GB рдЯреЙрд░реЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ

рдПрдХ рдХрд╛рд░реНрдп:

рдЗрдВрдЯрд░рдиреЗрдЯрд╢рд┐рд╡рд╛рдп рдПрдХ рдкреАрд╕реА рдЖрд╣реЗ, рдкрд░рдВрддреБ USB рджреНрд╡рд╛рд░реЗ рдлрд╛рдЗрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ. рдЗрдВрдЯрд░рдиреЗрдЯрд╕рд╣ рдПрдХ рдЯреЕрдмрд▓реЗрдЯ рдЖрд╣реЗ рдЬрд┐рдереВрди рд╣реА рдлрд╛рдЗрд▓ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рдЯреЕрдмрд▓реЗрдЯрд╡рд░ рдЖрд╡рд╢реНрдпрдХ рдЯреЙрд░реЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рддреЗрдереЗ рдкреБрд░реЗрд╢реА рдореЛрдХрд│реА рдЬрд╛рдЧрд╛ рдирд╛рд╣реА. рдЯреЛрд░реЗрдВрдЯрдордзреАрд▓ рдлрд╛рдЗрд▓ рдПрдХ рдЖрдгрд┐ рдореЛрдареА рдЖрд╣реЗ.

рд╕рдорд╛рдзрд╛рдирд╛рдЪрд╛ рдорд╛рд░реНрдЧ:

рдореА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯреЙрд░рдВрдЯ рд╕реБрд░реВ рдХреЗрд▓рд╛. рдЬреЗрд╡реНрд╣рд╛ рдореЛрдХрд│реА рдЬрд╛рдЧрд╛ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдВрдкрд▓реА рддреЗрд╡реНрд╣рд╛ рдореА рдбрд╛рдЙрдирд▓реЛрдбрд▓рд╛ рд╡рд┐рд░рд╛рдо рджрд┐рд▓рд╛. рдореА рдЯреЕрдмрд▓реЗрдЯрд▓рд╛ PC рд▓рд╛ рдЬреЛрдбрд▓реЗ рдЖрдгрд┐ рдЯреЕрдмреНрд▓реЗрдЯрд╡рд░реВрди PC рд╡рд░ рдлрд╛рдЗрд▓ рд╣рд▓рд╡рд▓реА. рдореА рд╡рд┐рд░рд╛рдо рджрд┐рд▓рд╛ рдЖрдгрд┐ рдорд╛рдЭреНрдпрд╛ рдЖрд╢реНрдЪрд░реНрдпрд╛рдиреЗ рдлрд╛рдИрд▓ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдЭрд╛рд▓реА рдЖрдгрд┐ рдЯреЙрд░рдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдд рд░рд╛рд╣рд┐рд▓рд╛ рдЬрдгреВ рдХрд╛рд╣реА рдШрдбрд▓реЗрдЪ рдирд╛рд╣реА.

рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдпрдВрдЯ рдЬреНрдпрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рддреЛ рддреНрдпрд╛ рдлрд╛рдИрд▓рд╡рд░ рд╡рд┐рд░рд│ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рддреЛ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдореБрд│реЗ, рд╕рд┐рд╕реНрдЯрдо рдПрдХрд╛рдЪ рд╡реЗрд│реА 16GB рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдирд╛рд╣реА рдЖрдгрд┐ 4GB рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдлрд╛рдЗрд▓рд╡рд░ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдирд╛ рддреНрд░реБрдЯреА рдЙрджреНрднрд╡рдгрд╛рд░ рдирд╛рд╣реА.

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд░ рд╡реЗрд│рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдорд▓рд╛ рдорд╛рдЭреНрдпрд╛ PC рд╡рд░ рдПрдХрд╛рдЪ рдЯреЙрд░реЗрдВрдЯрдЪреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рднрд╛рдЧ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЪрд╛рд░ рдлрд╛рдпрд▓реА рдорд┐рд│рд╛рд▓реНрдпрд╛. рдЖрддрд╛ рдлрдХреНрдд рддреНрдпрд╛рдВрдирд╛ рдПрдХрддреНрд░ рдареЗрд╡рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореВрд▓рдд: рд╕реЛрдкреА рдЖрд╣реЗ. рдЬрд░ рдЪрд╛рд░ рдлрд╛рдпрд▓реАрдВрдкреИрдХреА рдПрдХрд╛ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд╛рдирд╛рд╡рд░ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯреНрд╕ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рддреАрд▓ рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рджреБрд╕рд░реНтАНрдпрд╛ рдореВрд▓реНрдпрд╛рд╕рд╣ рдмрджрд▓рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ.

рдорд▓рд╛ рдЕрд╕реЗ рд╡рд╛рдЯрд▓реЗ рдХреА рдЗрддрдХрд╛ рд╕рд╛рдзрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдЕрд╕рд╛рд╡рд╛. рдЕрд╢реА рд╕рдорд╕реНрдпрд╛ рдХреЛрдгрд╛рд▓рд╛рдЪ рдЖрд▓реА рдирд╛рд╣реА рдХрд╛? рдкрдг рдорд▓рд╛ рдХрд│рд▓реЗ рдХреА рдорд▓рд╛ рддреЗ рд╢реЛрдзрд╛рдпрдЪреЗ рдХреАрд╡рд░реНрдб рджреЗрдЦреАрд▓ рдорд╛рд╣рд┐рдд рдирд╛рд╣реАрдд. рдореНрд╣рдгреВрди, рдореА рдпрд╛ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рддреНрд╡рд░реАрдд рд▓реБрдЖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдпрд╛рд░ рдХреЗрд▓реА рдЖрдгрд┐ рдЖрддрд╛ рдореА рддреА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдХреЗрд▓реА рдЖрд╣реЗ. рд╣реЗ рдорд▓рд╛ рд╢реЗрдЕрд░ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ.

рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдЯреЙрд░реЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдд рдЖрд╣реЗ

  1. рдкрд╣рд┐рд▓реНрдпрд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╡рд░ рдЯреЙрд░реЗрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ рд╕реБрд░реВ рдХрд░рд╛
  2. ROM рднрд░реЗрдкрд░реНрдпрдВрдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛
  3. рдбрд╛рдЙрдирд▓реЛрдб рдерд╛рдВрдмрд╡рд╛
  4. рдлрд╛рдИрд▓ рджреБрд╕рд░реНтАНрдпрд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рд╡рд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рдлрд╛рдИрд▓рдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░ рдПрдХ рдирдВрдмрд░ рдЬреЛрдбрд╛
  5. рдлрд╛рдЗрд▓ рдкреВрд░реНрдгрдкрдгреЗ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдИрдкрд░реНрдпрдВрдд рдЖрдореНрд╣реА рдкрд╣рд┐рд▓реНрдпрд╛ рдмрд┐рдВрджреВрд╡рд░ рдкрд░рдд рдпреЗрдК

рдПрдХрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рднрд╛рдЧ рд╡рд┐рд▓реАрди рдХрд░рдгреЗ

рд╢реЗрд╡рдЯрдЪрд╛ рднрд╛рдЧ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рддреЗ рдПрдХрд╛ рд╕рдВрдкреВрд░реНрдг рдлрд╛рдИрд▓рдордзреНрдпреЗ рдЧреЛрд│рд╛ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдХрд╛рд░реНрдп рд╕реЛрдкреЗ рдЖрд╣реЗ:

  1. рд╕рд░реНрд╡ рднрд╛рдЧ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╡рд╛рдЪрддреЛ
  2. рдЬрд░ рдХрд╛рд╣реА рднрд╛рдЧрд╛рдд рдкреЛрдЭрд┐рд╢рди рдЭрд┐рд░реЛ рдмрд╛рдЗрдЯ рдирд╕реЗрд▓ рддрд░ рдЖрдкрдг рддреЗ рдЖрдЙрдЯрдкреБрдЯрд╡рд░ рд▓рд┐рд╣реВ, рдЕрдиреНрдпрдерд╛ рд╢реВрдиреНрдп рд▓рд┐рд╣реВ.

рдХрд╛рд░реНрдп 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 рд╡рд░ рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдпрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓рд╛ рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╣ рдлрд╛рдЗрд▓ рддрдкрд╛рд╕рд▓реА.

рдЯреЕрдмреНрд▓реЗрдЯрд╡рд░реАрд▓ рд╢реЗрд╡рдЯрдЪрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗрд▓рд╛ рднрд╛рдЧ рд╡рд┐рддрд░рдгрд╛рд╡рд░ рд╕реЛрдбрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдкрд░рдВрддреБ рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛рдЖрдзреА рднрд╛рдЧрд╛рдВрдЪреА рд░реА-рдЪреЗрдХрд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдлрд╛рдЗрд▓ рдкреБрдиреНрд╣рд╛ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА рдореНрд╣рдгреВрди рдЕрдирдЪреЗрдХ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд╡рд╛рдкрд░рд▓реЗрд▓реЗ:

  1. рдЯреЕрдмреНрд▓реЗрдЯрд╡рд░ рдлреНрд▓рдб рдЯреЙрд░реЗрдВрдЯ рдХреНрд▓рд╛рдпрдВрдЯ.
  2. PC рд╡рд░ рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдпрдВрдЯ qBittorent.
  3. рд▓реБрдЖ рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛