Come faccio a serializzare un oggetto di tipo Date dinamicamente?
Mi spiego meglio, ho un orologio programmato in Java ma, nel caso in cui andasse via la corrente, vorrei sapere a che ora è successo..com'è fattibile secondo voi?
Come faccio a serializzare un oggetto di tipo Date dinamicamente?
Mi spiego meglio, ho un orologio programmato in Java ma, nel caso in cui andasse via la corrente, vorrei sapere a che ora è successo..com'è fattibile secondo voi?
Benvenuto sul forum!Le discussioni relative a Java non sono trattate qui, ma nell'apposita sottosezione.
Provvedo a spostare il thread.
![]()
Amaro C++, il gusto pieno dell'undefined behavior.
L'unico modo è salvare periodicamente l'istante di tempo da qualche parte. Dove lo vuoi serializzare? Su file? Su DB? Lo vuoi serializzare in modo "leggibile" (all'occhio umano) o sfruttando la serializzazione Java?
Ad ogni modo, la classe Date è serializzabile, quindi per l'ultima opzione, ti basta scrivere l'oggetto in un ObjectOutputStream collegato ad un FileOutputStream.
Dacci ulteriori dettagli su cosa vuoi ottenere.
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
Se magari spieghi per bene cosa vuoi fare, le idee si possono trovare... al momento stiamo parlando del nulla.
Che tipo di applicazione stai scrivendo? Dove deve girare? Che deve fare di preciso? Dove vuoi "serializzare" se non ti va bene il disco?
Non hai dato nessuna informazione, che idee possiamo avere noi?
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
Con la premessa che hai fatto all'inizio, allora vorrebbe dire che ad esempio ad intervalli di 1 minuto vai a scrivere la data da qualche parte in modo permanente. Quando l'applicazione ritorna attiva, puoi appunto sapere a che data/ora si era interrotta.
Nota: un Date contiene un long dei millisecondi. Un long è 8 byte, quindi la cosa più semplice è salvare questi 8 byte. Puoi anche decidere di salvare solo i secondi ... dividi per 1000 ma non ti cambia comunque tantissimo le cose.
E nota che serializzare 1 Date con la "serializzazione" degli oggetti (=ObjectOutputStream) fa scrivere ben più che 8 byte.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Allora, sto programmando un orologio basato su un server Linux che controlla dei motorini che portano le lancette in posizione..purtroppo, non conoscendo la posizione dei motorini e delle lancette, sono costretto a salvarla nel caso andasse via la luce o altre evenienza...il programma girerebbe su scheda sd quindi non ho molte scritture/letture da fare oltre che una velocità un pò bassa ma non penso sia un problema..
Se ho capito bene, quindi, a te serve salvare l'informazione dell'ora (ore, minuti e secondi) in modo da poterla rileggere quando l'applicazione torna a funzionare. Se è così, ti basta salvare il dato "long" dei millisecondi restituiti dal Date in un file di dati (quindi, non necessariamente un file human-readable).
codice:FileOutputStream fos = null; DataOutputStream dos = null; try { fos = new FileOutputStream("myTimeStamp.dat"); dos = new DataOutputStream( fos ); dos.writeLong( new Date().getTime() ); dos.flush(); } catch (Exception e) { e.printStackTrace(); } finally { if (dos != null) { try { dos.close(); } catch (Exception e) { } } else { if (fos != null) { try { fos.close(); } catch (Exception e) { } } } }
Quando l'applicazione riparte, semplicemente andrai a leggere con un DataInputStream quell'unico long presente nel file e lo usi per creare l'oggetto Date corrispondente.
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
Provo così, risparmio qualcosina sul salvataggio datiVi ringrazio!