( apal | 2022. 09. 29., cs – 10:16 )

Szerkesztve: 2022. 09. 29., cs – 10:38

Irsz valamit ami eleve streamelve olvassa fel a file-t es teszi at base64-be on-the-fly? Mondjuk 4096*3-as chunkokban felolvasod es 4096*4-es chunkokban letarolod, oszt ennyi. Ha fel tudsz olvasni 3*N byteot es kiiord 4*N byteba, akkor azok osszefuzhetoek base64-ben is minden tovabbi nelkul definicio szerint. Csak az utolso (2/3 valoszinuseggel 3-mal nem oszthato merettel rendelkezo) bytekupac eseten van az hogy mar nem tudod tovabbfuzni, vagyhat nem feltetlenul a legjobb otlet. De akkor meg mar ugyis vege van a filenak :)

Ez a "felolvasod a file-t majd memoriaban atteszed base64-re es utana lestreameled valahova" az minden programnyelvben/kornyezetben elkepesztoen unhatekony,  nemhogy egy olyan kornyezetben amit eleve memoriazabalonak teremtett a joisten. Ellenben az a szep hogy magat az alapproblemat problemat O(1) memory footprinttel is meg lehet oldani (szoval ha az lenne a feladat hogy egy atmega* mikrokontroller + sdkartya + tcp/ip offload engine kombinacioval oldjam meg, akkor meg lehet csinalni). Es hat azert egy base64 encoder nem egy agysebeszet.

Szerk: es raadasul a streameleses valtozat meg gyorsabb is lesz mert a disk input dma es az ethernet downstream dma tud egyszerre dolgozni. Es nem is kell hozza annyi effort ;)