16GB ఖాళీ స్థలంతో టాబ్లెట్ ద్వారా 4GB టొరెంట్‌ని డౌన్‌లోడ్ చేస్తోంది

16GB ఖాళీ స్థలంతో టాబ్లెట్ ద్వారా 4GB టొరెంట్‌ని డౌన్‌లోడ్ చేస్తోంది

ఆబ్జెక్టివ్:

ఇంటర్నెట్ లేకుండా PC ఉంది, కానీ 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లో డౌన్‌లోడ్ చేసి, అసెంబుల్ చేయగలిగాము. విలీనం తర్వాత, నేను టాబ్లెట్ నుండి టొరెంట్ ఫైల్‌ను తీసివేసాను. నేను నా PCలో టొరెంట్ క్లయింట్‌ను ఇన్‌స్టాల్ చేసాను మరియు దానితో ఫైల్‌ను తనిఖీ చేసాను.

టాబ్లెట్‌లో చివరిగా డౌన్‌లోడ్ చేయబడిన భాగాన్ని పంపిణీలో వదిలివేయవచ్చు, అయితే మీరు దీనికి ముందు భాగాలను మళ్లీ తనిఖీ చేయడాన్ని ప్రారంభించాలి మరియు ఫైల్‌ను మళ్లీ డౌన్‌లోడ్ చేయని విధంగా ఎంపికను తీసివేయాలి.

ఉపయోగించబడిన:

  1. టాబ్లెట్‌లో ఫ్లడ్ టొరెంట్ క్లయింట్.
  2. PCలో టొరెంట్ క్లయింట్ qBittorent.
  3. లువా స్క్రిప్ట్

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి