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

    [JAVA] deserializzazione oggetti

    salve avrei il seguente problema:
    Non riesco a deserializzare gli oggetti passati in rete!
    Il codice della deserializzazione è il seguente:
    codice:
     
    
    Codice PHP:
            /* il metodo receiveMessage(DatagramPacket) deserializza la sequanza di byte ricevuti dalla rete          * ottenendo così l'oggetto message. In base al tipo di msg ricevuto richiama poi la classe adatta           * ad elaborare tale messaggio         */            public void receiveMessage(DatagramPacket dpacketthrows IOExceptionClassNotFoundException         {                System.out.println("Messaggio ricevuto" dpacket.getAddress() );                System.out.println("Porta: " dpacket.getPort());             System.out.println("Lunghezza messaggio: " dpacket.getLength());                             // deserializzazione oggetti ricevuti dalla rete             ByteArrayInputStream biStream = new ByteArrayInputStream(dpacket.getData());             ObjectInputStream ois=new ObjectInputStream(biStream);                                      tera.NetworkMsg arriveMsg=new tera.NetworkMsg();             arriveMsg=(tera.NetworkMsg)ois.readObject();                 System.out.println(arriveMsg.getClass());                             // verifica il tipo di messaggio arrivato                if (arriveMsg instanceof cyclon.ResponseViewExchangeMsg)                  {                    System.out.println("ricevuto messaggio di risposta di shuffle");                    cyclon.ResponseViewExchangeMsg msg1=(cyclon.ResponseViewExchangeMsg)ois.readObject();                    }                if (arriveMsg instanceof cyclon.ViewExchangeMsg)                      {                        System.out.println("ricevuto messaggio di shuffle");                        cyclon.ViewExchangeMsg msg=(cyclon.ViewExchangeMsg)ois.readObject();                        cyclonMan.shuffleHandler(msg);                     }                     else if (arriveMsg instanceof tera.NetworkMsg)                         {                                 System.out.println("Network message");                          }                biStream.reset();                ois.close(); } 
    mi da errore sulla seguente riga di codice:
    cyclon.ViewExchangeMsg msg=(cyclon.ViewExchangeMsg)ois.readObject();

    In teoria io leggo l'oggetto e verifico di che oggetto si tratta (tutti messaggi ereditari dal tipo messaggio) e poi vorrei ricostruire l'oggetto esatto ma a quanto pare in quest'ultimo messaggio mi dà errore.
    L'errore in questione è: java.io.StreamCorruptedException

    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Se l'oggetto assegnato dalla prima readObject() alla variabile arriveMsg è di un tipo di cui fai giustamente il test con instanceof, perché devi fare un ulteriore readObject()??? Basta fare il cast al tipo specifico. Se non c'è qualche motivo particolare (che ovviamente non posso conoscere io) non mi sembra che abbia senso leggere un altro oggetto dello stesso tipo.


    P.S.: in tera.NetworkMsg arriveMsg=new tera.NetworkMsg(); non serve affatto istanziare un oggetto! Assegni già qualcos'altro subito dopo alla variabile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.