Laai 'n 16GB-torrent af via 'n tablet met 4GB vrye spasie

Laai 'n 16GB-torrent af via 'n tablet met 4GB vrye spasie

'N Taak:

Daar is 'n rekenaar sonder die internet, maar dit is moontlik om die lêer via USB oor te dra. Daar is 'n tablet met die internet vanwaar hierdie lêer oorgedra kan word. Jy kan die vereiste torrent op jou tablet aflaai, maar daar is nie genoeg vrye spasie nie. Die lêer in die torrent is een en groot.

Pad na oplossing:

Ek het die torrent begin om af te laai. Toe die vrye spasie amper weg was, het ek die aflaai onderbreek. Ek het die tablet aan die rekenaar gekoppel en die lêer van die tablet na die rekenaar geskuif. Ek het stilgebly en tot my verbasing is die lêer weer geskep en die torrent het voortgegaan om af te laai asof niks gebeur het nie.

As gevolg van die feit dat die torrent-kliënt die yl vlag op die lêer stel waarin dit die ontvangde data skryf, probeer die stelsel nie 16GB op een slag reserveer nie en 'n fout sal nie voorkom wanneer daar na 'n lêer verder as 4GB probeer word nie.

Nadat ek die prosedure vier keer herhaal het, het ek vier lêers op my rekenaar ontvang wat verskillende dele van dieselfde torrent bevat. Al wat nou oorbly is om hulle bymekaar te sit. Die prosedure is in wese eenvoudig. Jy moet die nulgrepe met 'n ander waarde vervang as dit op 'n gegewe posisie in een van die vier lêers bestaan.

Dit het vir my gelyk asof so 'n eenvoudige program op die internet moet wees. Het niemand al ooit so 'n probleem teëgekom nie? Maar ek het besef dat ek nie eers weet watter sleutelwoorde om daarvoor te soek nie. Daarom het ek vinnig 'n Lua-skrif vir hierdie taak geskep en nou het ek dit geoptimaliseer. Dit is wat ek wil deel.

Laai die torrent in dele af

  1. begin om die torrent op die eerste toestel af te laai
  2. wag totdat die ROM gevul is
  3. onderbreek die aflaai
  4. dra die lêer oor na die tweede toestel en voeg 'n nommer by die lêernaam
  5. ons keer terug na die eerste punt totdat die lêer heeltemal afgelaai is

Voeg dele saam in een lêer

Nadat die laaste deel ontvang is, is dit nodig om dit in een hele lêer te versamel.

Die taak is eenvoudig:

  1. Lees alle dele gelyktydig
  2. As die posisie in een of ander deel nie 'n nulgreep is nie, dan skryf ons dit na die uitvoer, anders skryf ons nul

Funksie merge_part aanvaar 'n verskeidenheid drade streams_in waarvan 'n gedeelte van grootte lees buffer_length en gee die resultaat van die samevoeging van dele van verskillende drade terug.

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
--[[

Funksie string.gsub is geskik vir die taak omdat dit stukke gevul met nulle sal vind en lewer wat daaraan gegee word.

--]]
                out_part = out_part:gsub(" +", function(zero_string)

                    if #in_part < find_index then
                        return -- не на что менять
                    end
--[[

string.gsub gee nie die posisie oor waar die wedstryd gevind is nie. Daarom doen ons 'n parallelle soektog na die posisie zero_string die funksie te gebruik string.find. Dit is genoeg om die eerste nulgreep te vind.

--]]
                    local start_index = out_part:find(" ", find_index, true)
                    find_index = start_index + #zero_string

--[[

Nou as in in_part daar is data vir out_part kopieer hulle.

--]]
                    if #in_part >= start_index then
                        local end_index = start_index + #zero_string - 1
--[[

Sny uit in_part deel wat ooreenstem met die volgorde van nulle.

--]]
                        local part = in_part:sub(start_index, end_index)

                        if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[

В part daar is data.

--]]
                            if #part == #zero_string then
                                return part
                            else
--[[

part blyk minder as 'n reeks nulle te wees. Kom ons vul dit aan met hulle.

--]]
                                return part..zero_string:sub(1, end_index - #in_part)
                            end
                        end
                    end
                end)
            end
        end
    end
    return out_part
end

Gevolgtrekking

Ons kon dus hierdie lêer op 'n rekenaar aflaai en saamstel. Ná die samesmelting het ek die torrent-lêer van die tablet af gehaal. Ek het 'n torrent-kliënt op my rekenaar geïnstalleer en die lêer daarmee nagegaan.

Die laaste afgelaaide deel op die tablet kan op die verspreiding gelaat word, maar jy moet die herkontrolering van die dele voor dit aktiveer en die lêer ontmerk sodat dit nie weer aflaai nie.

Gebruik:

  1. Flud torrent-kliënt op 'n tablet.
  2. Torrent kliënt qBittorent op rekenaar.
  3. Lua skrif

Bron: will.com

Voeg 'n opmerking