Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Java] riconoscere la classe di un oggetto serializzato

    allora vi espongo il mio problema

    Ho serializzato una classe per poterla inviare in rete tramite un buffer da un nodo ad un altro dove deserializzo il buffer ricevuto. Fin qui tutto ok!
    Il problema sta nel fatto che la classe che devo serializzare non è sempre la stessa (tramite ereditarietà ho definito 5-6 classi ognuna delle quali definisce un tipo di messaggio differente) quindi come fà il nodo ricevente a sapere quale classe deve ricostruire tramite la deserializzazione???????????????????????

    Forse potrei utilizzare la Java Reflection ma se così fosse non riesco a capire come posso riconoscere la classe a partire dal buffer che ho ricevuto dalla rete.

    Spero di essere stato chiaro ;-)

    Grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] riconoscere la classe di un oggetto serializzato

    Originariamente inviato da pdicanio2004
    quindi come fà il nodo ricevente a sapere quale classe deve ricostruire tramite la deserializzazione???????????????????????
    Non deve "ricostruire" nulla .... quando deserializzi (readObject()) ottieni l'oggetto che avevi serializzato. Se il problema è capire di quale tipo è, puoi fare un test con instanceof e se ha successo puoi fare un cast al tipo specifico e quindi usarlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    si ok è vero che non "ricostruisco" l'oggetto mi sono espresso male ma per deserializzire (readObject()) devo prima istanziare l'oggetto.

    Ad esempio tera.NetworkMsg arriveMsg=(tera.Message)ois.readObject();
    ma potrebbe dover essere tera.Message arriveMsg=(tera.Message)ois.readObject(); o altro ancora....

    Non devo sapere prima di che tipo di messaggio si tratta??????

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Come ti è già stato detto hai a disposizione l'operatore instanceof.
    Meglio ancora se le tue classi derivano tutte da una sola.

    Caso A (instanceof):
    codice:
    Object obj = ois.readObject();
    
    if (obj instanceof tera.NetworkMsg) {
       tera.NetworkMsg msg = (tera.NetworkMsg) obj;
       ...
    }
    Caso B (ereditarietà). Suppongo che tutte le classi derivino da tera.Messaggio:
    codice:
    tera.Messaggio msg = (tera.Messaggio) ois.readObject();
    
    ...   // Qui potrai utilizzare, eventualmente, il polimorfismo.
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.