Do Twojej wiadomości, przyjęta tutaj odpowiedź jest niekompletna i myląca, ponieważ nie odnosi się do wad bezpieczeństwa. Patrz Efektywna Java , pozycja 86: Implementuj serializowalne z dużą ostrożnością. Odpowiedź Raedwalda mówiąca , że nie należy używać serializacji, jest poprawna.
Pozwala zabrać obiekt lub grupę obiektów, umieścić je na dysku lub wysłać przez przewodowy lub bezprzewodowy mechanizm transportowy, a następnie, być może na innym komputerze, odwrócić ten proces: wskrzesić oryginalny obiekt (y). Podstawowymi mechanizmami jest spłaszczenie obiektów w jednowymiarowy strumień bitów i przekształcenie tego strumienia bitów z powrotem w oryginalny obiekt (y).
Podobnie jak w przypadku Transportera w Star Trek, chodzi o zrobienie czegoś skomplikowanego i przekształcenie go w płaską sekwencję jedynek i zer, a następnie wykonanie tej sekwencji jedynek i zer (prawdopodobnie w innym miejscu, być może w innym czasie) i odtworzenie skomplikowanej oryginału ” coś."
Dlatego implementuj Serializableinterfejs, gdy potrzebujesz przechowywać kopię obiektu, wyślij je do innego procesu, który działa w tym samym systemie lub w sieci.
Ponieważ chcesz przechowywać lub wysyłać obiekt.
Ułatwia przechowywanie i wysyłanie przedmiotów. Nie ma to nic wspólnego z bezpieczeństwem.
Korzystając z formatu JSON, nie musisz implementować tego interfejsu i możesz po prostu wysłać ten ciąg znaków ... więc nadal nie jestem pewien, dlaczego używać tego interfejsu, skoro można używać formatu JSON.
@YonatanNir Ściśle zdefiniowany schemat jest lepszy. JSON ma być czytelny dla człowieka, podczas gdy formaty zakodowane binarnie są znacznie bardziej wydajne w sieci
Zaimplementuj Serializableinterfejs, jeśli chcesz mieć możliwość konwersji wystąpienia klasy na serię bajtów lub gdy myślisz, że Serializableobiekt może odwoływać się do wystąpienia Twojej klasy.
Serializable klasy są przydatne, gdy chcesz utrwalać ich instancje lub wysyłać je przez sieć.
Instancje Serializableklas można łatwo przesyłać. Serializacja ma jednak pewne konsekwencje dla bezpieczeństwa. Przeczytaj efektywną Javę Joshuy Blocha .
Odpowiedź na to pytanie brzmi, być może zaskakująco, nigdy lub bardziej realistycznie tylko wtedy, gdy jesteś zmuszony do współdziałania ze starszym kodem . To jest zalecenie w Effective Java, 3rd Edition autorstwa Joshua Blocha:
Nie ma powodu, aby używać serializacji Java w każdym nowym systemie, który piszesz
Java udostępnia jako część języka schemat serializacji, na który można się zdecydować za pomocą Serializableinterfejsu. Ten schemat ma jednak kilka trudnych do usunięcia wad i powinien być traktowany przez projektantów języka Java jako nieudany eksperyment.
To fundamentalnie udaje, że można mówić o serializowanym postaci obiektu. Ale istnieje nieskończenie wiele schematów serializacji, co daje nieskończenie wiele serializowanych formularzy. Narzucając jeden schemat, bez możliwości zmiany schematu, aplikacje nie mogą korzystać z najbardziej odpowiedniego dla siebie schematu.
Jest zaimplementowany jako dodatkowy sposób konstruowania obiektów, który omija wszelkie testy warunków wstępnych, które wykonują konstruktory lub metody fabryczne. O ile nie zostanie napisany skomplikowany, podatny na błędy i trudny do przetestowania dodatkowy kod deserializacji, Twój kod prawdopodobnie ma lukę w zabezpieczeniach.
Testowanie współdziałania różnych wersji formularza serializowanego jest bardzo trudne.
Obsługa niezmiennych obiektów jest kłopotliwa.
Co zamiast tego zrobić
Zamiast tego użyj schematu serializacji, który możesz jawnie kontrolować. Takie jak bufory protokołów, JSON, XML lub własny niestandardowy schemat.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.