Overengineering?

posted 29.05.2018

Poslední rok jsem propadl Ruby a jiným hipsterovinám a dokončil jsem tak první kolo životní cesty programátora. Všechno krátký, výstižný, žádné extra vrstvy. Pro jeden hobby projekt jsem zkusil zpracovat pokus ARESu o otevřená data a natáhnout seznam všech IČ v ČR. ARES šel cestou nejmenšího odporu, a tak vás čeká 500MB zazipovaný tarball, ve kterém je milion XML souborů, jeden pro každé IČ. No a nakonec jsem místo elegantního Ruby skončil u staré známé Javy.

Skoro mě dojala ta elegance práce s IO, se kterým jsem se poprvé setkal na škole a divil jsem se, proč prostě nepřečíst soubor do stringu a hotovo. Nabufferovat soubor, dekomprimovat, přečíst tar headery, pak pěkne jeden po druhém přečíst každý soubor a zarazit se tam, kde končí. Hotovo a paměti potřeba, že bych to spustil na Raspberry PI.
TarArchiveInputStream tarInput = new TarArchiveInputStream(
    new GzipCompressorInputStream(
        new BufferedInputStream(
            new FileInputStream(file)
        )
    )
);

TarArchiveEntry currentEntry;
while ((currentEntry = tarInput.getNextTarEntry()) != null) {
    AresOdpovedi result = unmarshaller.unmarshal(
        new XmlStreamReader(new BoundedInputStream(tarInput, currentEntry.getSize()))
    );
}