Przeczytałem sporo artykułów na temat serializacji i tego, że jest tak fajna i świetna, ale żaden z argumentów nie był wystarczająco przekonujący. Zastanawiam się, czy ktoś naprawdę może mi powiedzieć, co tak naprawdę możemy osiągnąć poprzez serializację klasy?
105
Odpowiedzi:
Najpierw zdefiniujmy serializację, a następnie porozmawiajmy o tym, dlaczego jest tak przydatna.
Serializacja to po prostu zamiana istniejącego obiektu na tablicę bajtów. Ta tablica bajtów reprezentuje klasę obiektu, wersję obiektu i stan wewnętrzny obiektu. Ta tablica bajtów może być następnie używana między maszynami JVM uruchamiającymi ten sam kod do przesyłania / odczytu obiektu.
Dlaczego mielibyśmy to robić?
Jest kilka powodów:
Komunikacja: Jeśli masz dwie maszyny, które działają z tym samym kodem i muszą się komunikować, prostym sposobem jest zbudowanie przez jedną maszynę obiektu z informacjami, które chciałby przesłać, a następnie serializacji tego obiektu na drugiej maszynie. Nie jest to najlepsza metoda komunikacji, ale spełnia swoje zadanie.
Trwałość: jeśli chcesz przechowywać stan określonej operacji w bazie danych, można ją łatwo serializować do tablicy bajtów i przechowywać w bazie danych w celu późniejszego pobrania.
Głęboka kopia: Jeśli potrzebujesz dokładnej repliki obiektu i nie chcesz kłopotać się pisaniem własnej wyspecjalizowanej klasy clone (), po prostu serializuj obiekt do tablicy bajtów, a następnie deserializuj go do innej obiekt osiąga ten cel.
Buforowanie: w rzeczywistości tylko aplikacja z powyższego, ale czasami kompilacja obiektu zajmuje 10 minut, ale deserializacja zajmuje tylko 10 sekund. Więc zamiast trzymać gigantyczny obiekt w pamięci, po prostu zbuforuj go do pliku poprzez serializację i przeczytaj go później, gdy będzie potrzebny.
Synchronizacja między maszynami JVM: Serializacja działa na różnych maszynach JVM, które mogą działać na różnych architekturach.
źródło
Podczas uruchamiania aplikacji wszystkie jej obiekty są przechowywane w pamięci (RAM). Kiedy wychodzisz, ta pamięć jest odzyskiwana przez system operacyjny, a program zasadniczo „zapomina” o wszystkim, co się wydarzyło, gdy był uruchomiony. Serializacja rozwiązuje ten problem, umożliwiając aplikacji zapisywanie obiektów na dysku, aby mogła je odczytać przy następnym uruchomieniu. Jeśli Twoja aplikacja ma zapewnić jakikolwiek sposób zapisywania / udostępniania poprzedniego stanu, będziesz potrzebować jakiejś formy serializacji.
źródło
Mogę podzielić się swoją historią i mam nadzieję, że dostarczy ona kilku pomysłów, dlaczego serializacja jest konieczna. Jednak odpowiedzi na Twoje pytanie są już niezwykle szczegółowe.
Miałem kilka projektów, które wymagały załadowania i odczytania kilku plików tekstowych. Pliki zawierały słowa pomijane, czasowniki biomedyczne, skróty biomedyczne, słowa połączone ze sobą semantycznie itp. Zawartość tych plików jest prosta: słowa !
Teraz dla każdego projektu musiałem odczytać słowa z każdego z tych plików i umieścić je w różnych tablicach; Ponieważ zawartość pliku nigdy się nie zmieniła, stało się to powszechnym, choć zbędnym zadaniem po pierwszym projekcie.
Więc stworzyłem jeden obiekt do odczytu każdego z tych plików i zapełnienia poszczególnych tablic (zmiennych instancji obiektów). Następnie serializowałem obiekty, a następnie dla późniejszych projektów po prostu je deserializowałem. Nie musiałem czytać plików i ponownie wypełniać tablic.
źródło
W istocie :
Zobacz zastosowania z Wiki :
Serializacja ma wiele zalet. To zapewnia:
źródło
Najbardziej oczywiste jest to, że możesz przesyłać serializowaną klasę przez sieć, a odbiorca może utworzyć duplikat oryginalnej instancji. Podobnie możesz zapisać zserializowaną strukturę w systemie plików.
Należy również zauważyć, że serializacja jest cykliczna, więc w razie potrzeby można serializować całą heterogeniczną strukturę danych w jednej pęczce.
źródło
Zserializowane obiekty utrzymują stan w przestrzeni, mogą być przesyłane przez sieć, system plików itp. ... i czas, mogą przetrwać JVM, który je utworzył.
Czasami jest to przydatne.
źródło
Używam obiektów serializowanych do standaryzacji argumentów, które przekazuję do funkcji lub konstruktorów klas. Przekazanie jednego serializowanego komponentu bean jest znacznie czystsze niż długa lista argumentów. Rezultatem jest kod, który jest łatwiejszy do odczytania i debugowania.
źródło
Dla prostego celu uczenia się (uwaga, powiedziałem uczenie się, nie powiedziałem najlepiej, ani nawet dobrze, ale tylko po to, aby zrozumieć rzeczy), możesz zapisać swoje dane do pliku tekstowego na komputerze, a następnie mieć program który odczytuje te informacje i na podstawie pliku możesz mieć inny program. Gdybyś był bardziej zaawansowany, niekoniecznie musiałby to być plik txt, ale coś innego.
Z drugiej strony serializacja przekłada rzeczy bezpośrednio na język komputerowy. To tak, jakbyś mówił hiszpańskiemu komputerowi coś po hiszpańsku, zamiast mówić mu coś po francusku, zmuszając go do nauki francuskiego, a następnie zapisując wszystko w rodzimym hiszpańskim, tłumacząc wszystko. Nie jest to najbardziej zaawansowana technologicznie odpowiedź, po prostu próbuję stworzyć zrozumiały przykład w popularnym formacie językowym.
Serializacja jest również szybsza, ponieważ w Javie obiekty są obsługiwane na stercie i trwają znacznie dłużej, niż gdyby były reprezentowane jako prymitywy na stosie. Prędkość, prędkość, prędkość. I mniej przetwarzania plików z punktu widzenia programisty.
źródło