2012-05-03 7 views
12

Quale estensione di file sarebbe più adatta quando si salva un oggetto Serializable su disco?Estensione file per un oggetto serializzato

FileOutputStream fos = null; 
ObjectOutputStream out = null; 
try { 
    fos = new FileOutputStream(filename); 
    out = new ObjectOutputStream(fos); 
    out.writeObject(mySerializableObject); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} finally { 
    IOUtils.closeQuietly(out); 
} 
+1

Sto pensando .ser al momento ma non al 100% – Edd

risposta

23

".ser" è una scelta ragionevole per il suffisso del file - http://www.file-extensions.org/ser-file-extension

Tuttavia, si potrebbe sostenere che fanno poca differenza quello che si utilizza il suffisso ... a condizione che non si scontra altri suffissi di applicazione comunemente usati.

Un file oggetto serializzato Java può essere letto (nel modo normale) da un'applicazione Java che ha le classi rilevanti sul suo percorso di classe. Un suffisso ".ser" valido per tutte le dimensioni non fornisce alcun indizio su cosa potrebbero essere quelle classi e su dove un framework di avvio dell'applicazione dovrebbe trovarle. Pertanto, non sarà possibile impostare un'associazione di file in stile Windows per fornire l'avvio di un'applicazione con doppio clic.


Esiste un modo per visualizzare o modificare il file ser ??

Forse, ma con grande difficoltà, e solo in determinate condizioni.

Il contenuto del file è altamente dipendente dalla classe che è stata serializzata. Ora è possibile determinare qual è il nome di quella classe e (in alcuni casi) i nomi e i tipi dei campi serializzati. Tuttavia, se la classe utilizza serializzazione/esternalizzazione personalizzate, la rappresentazione sarà un blob opaco di dati binari senza alcun indizio nel file su come decodificarlo. Il problema del blob opaco è abbastanza comune perché molte classi importanti nella libreria di classi Java SE utilizzano la serializzazione personalizzata ... per l'efficienza ... e così fanno molte classi di applicazioni.

L'altro approccio possibile consiste nel trovare i file .class per tutte le classi menzionate nel file .ser, deserializzare in oggetti e utilizzare la reflection per accedere ai campi degli oggetti deserializzati. Potresti anche modificarli e riscriverli. Tuttavia, se non hai le giuste versioni di tutti i file .class, questo è un non-starter.

+0

C'è un modo per visualizzare o modificare il file? – Winz

+1

@ user1042983 In breve, no - è un elenco di oggetti Java e deve essere modificato solo programmaticamente dall'applicazione Java che lo ha creato. – Alex