Dėl Java objekto serializavimo norėčiau išbandyti skirtumą tarp JSON naudojimo ir bendrųjų serializavimo įrankių naudojimo laiko ir erdvės našumo požiūriu.
JSON pasirenka naudoti FASTJSON.
Serializavimo įrankis naudoja "Protostuff" ir "Kyro". Kodėl gi nenaudojant protobufo? Nes aš jaučiu, kad Java klasės su šimtais esamų savybių, sukurti naują atitikimo proto failą yra šiek tiek anti-žmogus. Protostuff yra patobulinta Protobuf versija, leidžianti tiesiogiai serializuoti Java objektą, naudojant jį šiek tiek panašiai kaip Kyro, be tiek daug tarpinių procesų, kaip Protobuf. Teigiama, kad kiti, tokie kaip Hession, Java su serializacija ir kt., turi daug prastesnį našumą nei Kryo ir Protobuf, todėl nežinau, ko tikėtis.
Po paprasto bandymo pastebėjau, kad atotrūkis yra gana akivaizdus, todėl pajutau, kad nereikia atlikti konkretaus vertinimo. Iškirpkite žurnalo pastraipą ir išsiųskite ją, visi tai jaučia.
išlaidų laikas yra System.nanoTime(); Visos trys yra numatytosios konfigūracijos be jokios konfigūracijos. Erdvės pėdsakas po serializacijos yra šiek tiek mažesnis nei protostuff, ir abu yra daug didesni nei JSON. Tai lengva suprasti, juk json stygos yra skaitomos, per daug neverčia. Serializavimui ir deserializavimui reikalingas laikas yra geresnis nei "Kyro", o ne "FastJSON", o skirtumas yra gana akivaizdus.
Taigi apibendrinant, jei nėra itin didelių reikalavimų erdvei, "Protostuff" gali būti geriausias pasirinkimas. Protostuff turi papildomą pranašumą prieš Kyro, tai yra, jei java klasė prideda laukus po serializacijos ir prieš deserializaciją (o tai neišvengiama realiame versle), Kyro bus nenaudinga. Tačiau protostuff gali būti naudojamas tol, kol jis pridedamas klasės pabaigoje ir naudoja saulės seriją JDK. Todėl, jei serializacija naudojama tokiuose scenarijuose kaip talpykla, o serializuotą objektą reikia saugoti ilgą laiką, galite pasirinkti tik protostuff.
Žinoma, jei reikia skaitomumo ar pan., galite naudoti tik json.
|