Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Serializzazione

  1. #1

    Serializzazione

    Piccola Domanda sulla serializzazione...

    FileOutputStream fs = new FileOutputStream("testSer.ser");
    ObjectOutputStream os = new ObjectOutputStream(fs);

    Qui ho capito che la serializzazione dell'oggetto viene eseguita grazie alla classe ObjectOutpStream che permette la chiamata del metodo writeObject al quale come lista dei parametri gli passo la variabile di referenza che si riferisce appunto al mio oggetto. Questo metodo non soltanto serializza l'oggetto ma lo salva grazie al FileOutStream in testSer.ser giusto?...

    Ma testSer.ser potrebbe essere anche testSer.txt? O deve per forza avere il formato ser?..Inoltre se per assurdo l'oggetto che mi viene inserito nel metodo writeObject ha magari accesso a due variabili con dei valori, queste variabili non dovrebbero essere salvate anch'esse nel file testser.ser? O li dentro va salvato soltanto lo stato attuale dell'oggetto?...

    Grazie in anticipo.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    1) L'estensione del file la inventi tu... .ser è un'estensione che si è inventato chi ha scritto l'esempio che hai letto tu. Nessuno ti vieta di dare al file estensione .txt, anche se non avrebbe molto senso: generalmente con l'estensione .txt si identificano file testo, cosa che un file di serializzazione non è.

    2) Cosa vorrebbe dire "l'oggetto ha accesso a due variabili"? Gli oggetti non hanno "accesso" a variabili: gli oggetto sono strutture dati che possono essere formati da variabili e metodi... dire che hanno accesso a variabili non ha alcun senso.

    Se un oggetto è composto da 3 variabili intere, ciò che viene serializzato è il valore delle 3 variabili intere.


    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

  3. #3

    ...

    Si perfetto, volevo dire questo, viene serializzato il valore per esempio di 3 variabili...serializzare vuol dire salvare lo stato giusto?Ok, allora vengono salvati lo stato di queste 3 variabili? E se è così, per stato delle variabili s'intende il valore di quest'ultime? E se ancora è così:P il valore viene salvato nel file che vado io a dichiara con File etc etc?...

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

    Re: ...

    Originariamente inviato da Diamante87
    serializzare vuol dire salvare lo stato giusto?Ok, allora vengono salvati lo stato di queste 3 variabili? E se è così, per stato delle variabili s'intende il valore di quest'ultime?
    La serializzazione innanzitutto prende in considerazione solo le variabili di "istanza" che non siano marcate 'transient'.
    Per "stato" di un oggetto comunque si intende l'insieme di tutti i campi (secondo quanto ho appena detto sopra) e tutto ciò a cui fanno eventualmente riferimento. Un oggetto di tipo Albergo potrebbe avere una variabile di istanza che è un array di N reference a oggetti di tipo Stanza che a sua volta contiene altri campi, ecc....
    Tutto questo è lo "stato" dell'oggetto, quindi in generale si parla di un "grafo" di oggetti.
    E quando scrivi un oggetto tramite serializzazione, sullo stream viene serializzato appunto tutto questo "stato".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    ...

    Si si questo lo avevo capito, la mia domanda era un'altra forse non mi ero spiegato bene, quando io serializzo lo stato di un oggetto, automaticamente salvo lo stato di questo oggetto, quindi le variabili che questo oggetto condivide etc etc, per esempio se ci sono tre variabili con i valori, serializzando vengono salvati questi valori giusto? Ma questi valori vengono salvati nello stream che sarebbe però il file che ho creato io? Esempio:

    FileOutputStream fs = new FileOutputStream("testSer.ser");
    ObjectOutputStream os = new ObjectOutputStream(fs);


    In questo caso i valori mi vengono salvati nel file testSer.ser ?...

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

    Re: ...

    Originariamente inviato da Diamante87
    quando io serializzo lo stato di un oggetto, automaticamente salvo lo stato di questo oggetto, quindi le variabili che questo oggetto condivide etc etc, per esempio se ci sono tre variabili con i valori, serializzando vengono salvati questi valori giusto?
    Ma sì certo ... se dici che hai capito cosa è lo stato, è chiaro che se quei tuoi campi non sono transient, vengono serializzati!!!

    Originariamente inviato da Diamante87
    Ma questi valori vengono salvati nello stream che sarebbe però il file che ho creato io?
    Eh beh ... sì mi sembra ovvio. Non capisco il dubbio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7

    ...

    Perchè quando apro per esempio il file al suo interno non trovo per esempio i valori ma scritte strane :P a questo punto suppongo che sia normale :P...

    Invece la deserializzazione cosa fa? Riporta lo stato dell'oggetto al punto di partenza? Se per esempio le variabili d'istanza valevano 2,3,4, chiamando un metodo venivano cambiate in 4,5,6 e effettuavo la serializzazione i valori delle variabili venivano salvate con 4,5,6, quando eseguo la deserializzazione ritornano ai valori di 2,3,4?

    grazie mille per il tuo aiuto davvero !!!...

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

    Re: ...

    Originariamente inviato da Diamante87
    Perchè quando apro per esempio il file al suo interno non trovo per esempio i valori ma scritte strane :P a questo punto suppongo che sia normale :P...
    Lo stream di dati serializzati è in un formato binario le cui specifiche sono oltretutto documentate dalla Sun (e comunque per il programmatore "normale" che deve solo (de)serializzare dati e basta non è importante/necessario conoscerle).
    Quindi se cerchi di aprirlo con un editor di testo è normale che vedi una accozzaglia di robe strane. Insomma ... un file di dati serializzati non è per un utente "umano"

    Originariamente inviato da Diamante87
    Invece la deserializzazione cosa fa? Riporta lo stato dell'oggetto al punto di partenza?
    Permette di riottenere un nuovo oggetto che ha lo stesso stato di quando era stato salvato. Cioè lo stato che esisteva nel momento in cui l'oggetto è stato serializzato.

    Originariamente inviato da Diamante87
    Se per esempio le variabili d'istanza valevano 2,3,4, chiamando un metodo venivano cambiate in 4,5,6 e effettuavo la serializzazione i valori delle variabili venivano salvate con 4,5,6, quando eseguo la deserializzazione ritornano ai valori di 2,3,4?
    No ovviamente. Lo stato che aveva quando è stato salvato: 4,5,6.
    Altrimenti che servirebbe??
    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.