16GB เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพ เชธเชพเชฅเซ‡ เชŸเซ‡เชฌเซเชฒเซ‡เชŸ เชฆเซเชตเชพเชฐเชพ 4GB เชŸเซ‹เชฐเซ‡เชจเซเชŸ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

16GB เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพ เชธเชพเชฅเซ‡ เชŸเซ‡เชฌเซเชฒเซ‡เชŸ เชฆเซเชตเชพเชฐเชพ 4GB เชŸเซ‹เชฐเซ‡เชจเซเชŸ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เชเช• เช•เชพเชฐเซเชฏ:

เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชตเชฟเชจเชพ เชชเซ€เชธเซ€ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฏเซเชเชธเชฌเซ€ เชฆเซเชตเชพเชฐเชพ เชซเชพเช‡เชฒ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เช›เซ‡. เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชธเชพเชฅเซ‡ เชเช• เชŸเซ‡เชฌเซเชฒเซ‡เชŸ เช›เซ‡ เชœเซ‡เชฎเชพเช‚เชฅเซ€ เช† เชซเชพเช‡เชฒ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชŸเซ‡เชฌเซเชฒเซ‡เชŸ เชชเชฐ เชœเชฐเซ‚เชฐเซ€ เชŸเซ‹เชฐเซ‡เชจเซเชŸ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชชเชฐเช‚เชคเซ เชคเซเชฏเชพเช‚ เชชเซ‚เชฐเชคเซ€ เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพ เชจเชฅเซ€. เชŸเซ‰เชฐเซ‡เช‚เชŸเชจเซ€ เชซเชพเช‡เชฒ เชเช• เช…เชจเซ‡ เชฎเซ‹เชŸเซ€ เช›เซ‡.

เช‰เช•เซ‡เชฒเชจเซ‹ เชฎเชพเชฐเซเช—:

เชฎเซ‡เช‚ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชŸเซ‹เชฐเซ‡เชจเซเชŸ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚. เชœเซเชฏเชพเชฐเซ‡ เช–เชพเชฒเซ€ เชœเช—เซเชฏเชพ เชฒเช—เชญเช— เชœเชคเซ€ เชฐเชนเซ€, เชคเซเชฏเชพเชฐเซ‡ เชฎเซ‡เช‚ เชกเชพเช‰เชจเชฒเซ‹เชกเชจเซ‡ เชฅเซ‹เชญเชพเชตเซเชฏเซเช‚. เชฎเซ‡เช‚ เชŸเซ‡เชฌเชฒเซ‡เชŸเชจเซ‡ 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 เชชเชฐ เชกเชพเช‰เชจเชฒเซ‹เชก เช…เชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชนเชคเชพ. เชตเชฟเชฒเซ€เชจเซ€เช•เชฐเชฃ เชชเช›เซ€, เชฎเซ‡เช‚ เชŸเซ‡เชฌเซเชฒเซ‡เชŸเชฎเชพเช‚เชฅเซ€ เชŸเซ‹เชฐเซ‡เชจเซเชŸ เชซเชพเช‡เชฒ เช–เซ‡เช‚เชšเซ€. เชฎเซ‡เช‚ เชฎเชพเชฐเชพ PC เชชเชฐ เชŸเซ‹เชฐเซ‡เชจเซเชŸ เช•เซเชฒเชพเชฏเช‚เชŸ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชซเชพเช‡เชฒ เชคเชชเชพเชธเซ€ เช›เซ‡.

เชŸเซ‡เชฌเซเชฒเซ‡เชŸ เชชเชฐ เช›เซ‡เชฒเซเชฒเซ‹ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‡เชฒ เชญเชพเช— เชตเชฟเชคเชฐเชฃ เชชเชฐ เช›เซ‹เชกเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเชฎเชพเชฐเซ‡ เช† เชชเชนเซ‡เชฒเชพ เชญเชพเช—เซ‹เชจเซ€ เชชเซเชจเชƒ-เชšเซ‡เช•เซ€เช‚เช— เชธเช•เซเชทเชฎ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช…เชจเซ‡ เชซเชพเช‡เชฒเชจเซ‡ เช…เชจเชšเซ‡เช• เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡เชฅเซ€ เช•เชฐเซ€เชจเซ‡ เชคเซ‡ เชซเชฐเซ€เชฅเซ€ เชกเชพเช‰เชจเชฒเซ‹เชก เชจ เชฅเชพเชฏ.

เชตเชชเชฐเชพเชฏเซ‡เชฒ:

  1. เชŸเซ‡เชฌเซเชฒเซ‡เชŸ เชชเชฐ เชซเซเชฒเชก เชŸเซ‹เชฐเซ‡เชจเซเชŸ เช•เซเชฒเชพเชฏเช‚เชŸ.
  2. PC เชชเชฐ เชŸเซ‹เชฐเซ‡เชจเซเชŸ เช•เซเชฒเชพเชฏเช‚เชŸ qBittorent.
  3. เชฒเซเช† เชธเซเช•เซเชฐเชฟเชชเซเชŸ

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹