Van Waar gaat dit “serialisatie”-gedoe over ?:
Hiermee kun je een object of een groep
objecten, zet ze op een schijf of verstuur
ze via een draad of draadloos
transportmechanisme, dan later,
misschien op een andere computer, omgekeerd
het proces: herleef het origineel
voorwerpen). De basismechanismen zijn:
maak object(en) plat tot a
eendimensionale stroom van bits, en om
zet die stroom van bits terug in de
originele object(en).Zoals de Transporter in Star Trek,
het draait allemaal om iets nemen
ingewikkeld en er een flat van maken
reeks van enen en nullen, dan nemen
die reeks van enen en nullen (mogelijk
op een andere plaats, mogelijk op een andere
tijd) en het reconstrueren van het origineel
ingewikkeld “iets.”
Dus, implementeer de Serializable
interface wanneer u een kopie van het object moet opslaan, stuur ze naar een ander proces dat op hetzelfde systeem of via het netwerk draait.
Omdat u een object wilt opslaan of verzenden.
Het maakt het opslaan en verzenden van objecten eenvoudig. Het heeft niets met veiligheid te maken.
Antwoord 1, autoriteit 100%
Het antwoord op deze vraag is, misschien verrassend, nooit, of realistischer, alleen wanneer u wordt gedwongen voor interoperabiliteit met verouderde code. Dit is de aanbeveling in Effective Java, 3rd Editiondoor Joshua Bloch:
Er is geen reden om Java-serialisatie te gebruiken in een nieuw systeem dat u schrijft
De hoofdarchitect van Oracle, Mark Reinhold, is bekend zoals zeggen dat het verwijderen van het huidige Java-serialisatiemechanisme een langetermijndoel is.
Waarom Java-serialisatie gebrekkig is
Java biedt als onderdeel van de taal een serialisatieschema waarvoor u zich kunt aanmelden, door gebruik te maken van de Serializable
-interface. Dit schema heeft echter een aantal hardnekkige gebreken en moet door de Java-taalontwerpers worden behandeld als een mislukt experiment.
- Het pretendeert in wezen dat men kan praten over degeserialiseerde vorm van een object. Maar er zijn oneindig veel serialisatieschema’s, wat resulteert in oneindig veel geserialiseerde vormen. Door één schema op te leggen, zonder enige manier om het schema te wijzigen, kunnen applicaties geen schema gebruiken dat het meest geschikt is voor hen.
- Het wordt geïmplementeerd als een extra manier om objecten te construeren, waarbij alle voorafgaande controles van uw constructeurs of fabrieksmethoden worden omzeild. Tenzij er lastige, foutgevoelige en moeilijk te testen extra deserialisatiecode wordt geschreven, heeft uw code waarschijnlijk een gapende beveiligingszwakte.
- Het testen van de interoperabiliteit van verschillende versies van het geserialiseerde formulier is erg moeilijk.
- Het hanteren van onveranderlijke objecten is lastig.
Wat te doen in plaats daarvan
Gebruik in plaats daarvan een serialisatieschema dat u expliciet kunt beheren. Zoals Protocol Buffers, JSON, XML of uw eigen aangepaste schema.
Antwoord 2, autoriteit 62%
-
Implementeer de
Serializable
-interface wanneer u een instantie van een klasse in een reeks bytes wilt kunnen converteren of wanneer u denkt dat eenSerializable
-object kan verwijzen naar een instantie van uw klas. -
Serializable
-klassen zijn handig als u exemplaren van deze klassen wilt behouden of ze via een kabel wilt verzenden. -
Instances van
Serializable
klassen kunnen eenvoudig worden verzonden. Serialisatie heeft echter enkele beveiligingsconsequenties. Lees Effective Javavan Joshua Bloch.