Pentru serializarea unui obiect Java, aș dori să testez diferența dintre utilizarea JSON și utilizarea instrumentelor generale de serializare în termeni de performanță temporală și spațială.
JSON alege să folosească fastjson.
Instrumentul de serializare folosește Protostuff și Kyro. De ce să nu folosești protobuf? Pentru că simt că pentru o clasă Java cu sute de proprietăți existente, crearea unui nou fișier proto potrivit este puțin anti-umană. Protostuff este o versiune îmbunătățită a Protobuf, care îți permite să serializezi direct un obiect Java, folosindu-l puțin ca Kyro, fără la fel de multe procese intermediare ca Protobuf. Alții, precum Hession, Java cu serializare etc., se spune că au performanțe mult mai slabe decât Kryo și Protobuf, așa că nu știu la ce să mă aștept.
După un test simplu, am constatat că diferența era destul de evidentă, așa că am simțit că nu era nevoie să fac o evaluare specifică. Taie un paragraf din jurnal și trimite-l, toată lumea îl simte.
timp de cost este System.nanoTime(); Toate trei sunt configurațiile implicite, fără nicio configurație. Amprenta spațială după serializare este puțin mai mică decât cea a protostuff-ului, iar ambele sunt mult mai mari decât în JSON. Este ușor de înțeles, până la urmă, șirurile json sunt lizibile, nu forța prea mult. Timpul necesar pentru serializare și deserializare este mai bun decât în Kyro față de FastJSON, iar diferența este destul de evidentă.
Așadar, în concluzie, dacă nu există cerințe extrem de solicitante pentru spațiu, Protostuff ar putea fi cea mai bună alegere. Protostuff are un avantaj suplimentar față de Kyro, și anume că, dacă clasa java adaugă câmpuri după serializare și înainte de deserializare (ceea ce este inevitabil în afaceri reale), Kyro va fi inutil. Totuși, protostuff poate fi folosit atâta timp cât este adăugat la finalul cursului și folosește seria sun JDK. Prin urmare, dacă serializarea este folosită în scenarii precum cache, iar obiectul serializat trebuie stocat mult timp, poți alege doar protostuff.
Desigur, dacă este nevoie de lizibilitate sau ceva de genul, poți folosi doar json.
|