Wanneer moeten we een Serializable-interface implementeren?

  • 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 Serializableinterface 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%

    1. Implementeer de Serializable-interface wanneer u een instantie van een klasse in een reeks bytes wilt kunnen converteren of wanneer u denkt dat een Serializable-object kan verwijzen naar een instantie van uw klas.

    2. Serializable-klassen zijn handig als u exemplaren van deze klassen wilt behouden of ze via een kabel wilt verzenden.

    3. Instances van Serializableklassen kunnen eenvoudig worden verzonden. Serialisatie heeft echter enkele beveiligingsconsequenties. Lees Effective Javavan Joshua Bloch.

    Other episodes