Για τη σειριοποίηση ενός αντικειμένου Java, θα ήθελα να δοκιμάσω τη διαφορά μεταξύ της χρήσης JSON και της χρήσης γενικών εργαλείων σειριοποίησης όσον αφορά τη χρονική και χωρική απόδοση.
Ο JSON επιλέγει να χρησιμοποιήσει το FastJSON.
Το εργαλείο σειριοποίησης χρησιμοποιεί το Protostuff και το Kyro. Γιατί να μην χρησιμοποιήσετε το protobuf; Επειδή πιστεύω ότι για μια κλάση java με εκατοντάδες υπάρχουσες ιδιότητες, η δημιουργία ενός νέου αντίστοιχου αρχείου πρωτοτύπου είναι λίγο αντιανθρώπινη. Το Protostuff είναι μια βελτιωμένη έκδοση του Protobuf, η οποία σας επιτρέπει να σειριοποιήσετε απευθείας ένα αντικείμενο Java, χρησιμοποιώντας το σε κάτι σαν το Kyro, χωρίς τόσες ενδιάμεσες διεργασίες όπως το Protobuf. Άλλα, όπως το Hession, η Java με σειριοποίηση κ.λπ., λέγεται ότι έχουν πολύ χειρότερες επιδόσεις από το Kryo και το Protobuf, οπότε δεν ξέρω τι να περιμένω.
Μετά από ένα απλό τεστ, διαπίστωσα ότι το κενό ήταν αρκετά εμφανές, οπότε ένιωσα ότι δεν χρειαζόταν να κάνω συγκεκριμένη αξιολόγηση. Κόψτε μια παράγραφο από το ημερολόγιο και στείλτε το, όλοι το νιώθουν.
Ο χρόνος κόστους είναι System.nanoTime(); Και οι τρεις είναι οι προεπιλεγμένες διαμορφώσεις χωρίς καμία διαμόρφωση. Το διαστημικό αποτύπωμα μετά τη σειριοποίηση είναι ελαφρώς χαμηλότερο από αυτό του πρωτοκειμένου, και τα δύο είναι πολύ υψηλότερα από το JSON. Αυτό είναι εύκολο να το καταλάβουμε, άλλωστε οι συμβολοσειρές json είναι ευανάγνωστες, μην πιέζετε πολύ. Ο χρόνος που απαιτείται για τη σειριοποίηση και την αποσειριοποίηση είναι καλύτερος από το Kyro έναντι του FastJSON και η διαφορά είναι αρκετά εμφανής.
Συμπερασματικά λοιπόν, αν δεν υπάρχουν εξαιρετικά απαιτητικές απαιτήσεις για χώρο, το Protostuff μπορεί να είναι η καλύτερη επιλογή. Το Protostuff έχει ένα επιπλέον πλεονέκτημα έναντι του Kyro, δηλαδή, εάν η κλάση java προσθέσει πεδία μετά τη σειριοποίηση και πριν από την αποσειριοποίηση (κάτι που είναι αναπόφευκτο στις πραγματικές επιχειρήσεις), το Kyro θα είναι άχρηστο. Ωστόσο, το πρωτότυπο υλικό μπορεί να χρησιμοποιηθεί αρκεί να προστεθεί στο τέλος του μαθήματος και να χρησιμοποιεί τη σειρά ήλιου JDK. Επομένως, εάν η σειριοποίηση χρησιμοποιείται σε σενάρια όπως η προσωρινή μνήμη και το σειριακό αντικείμενο πρέπει να αποθηκευτεί για μεγάλο χρονικό διάστημα, μπορείτε να επιλέξετε μόνο πρωτότυπο.
Φυσικά, εάν υπάρχει ανάγκη για αναγνωσιμότητα ή κάτι τέτοιο, μπορείτε να χρησιμοποιήσετε μόνο το json.
|