Il modo migliore per memorizzare un'immagine / suono all'interno di una classe?
-
03-07-2019 - |
Domanda
Sto sviluppando una sorta di formato di scambio tra istanze di un'applicazione in modo che l'utente possa salvare le informazioni su file e ripristinarle in seguito. L'intero "formato di scambio" è una singola classe che viene serializzata e scritta su disco.
Come consiglieresti di archiviare informazioni grafiche / sonore all'interno di quella classe? Vorrei evitare di inserire un file .jar.
Soluzione
È possibile mantenere le risorse archiviate nella classe come array di byte []. Usando ByteArrayInputStream e ByteArrayOutputStream puoi avvolgere le matrici come flussi e usarle per archiviare e recuperare risorse.
Altri suggerimenti
Archivia i dati esattamente come preferisci all'interno della classe ma implementa la serializzazione personalizzata per i dati. Vedi Serializable .
** me **
che ne dici di maggiori dettagli sul tuo caso? il "migliore" il metodo di solito dipende dalla particolare applicazione / utilizzo. l'immagine / il suono provengono dai file? da un ruscello? Si prevede che ciascuna istanza della classe memorizzi immagini separate? Oppure un'immagine può essere condivisa tra istanze diverse?
gsmd
le immagini provengono da file, i suoni arrivano da un ruscello; c'è in realtà un set di elementi alcuni dei quali possono avere un immagine allegata; un'immagine non può essere condiviso
Quali metodi hai provato? Immagino che usare l'interfaccia Serializable sia la strada da percorrere. Ecco due articoli sull'argomento.
In sostanza,
- implementa l'interfaccia Serializable nella tua classe
- contrassegna i membri che non devono essere salvati nel file come temporanei (membri che contengono dati contestuali come handle di file, connessioni socket, ecc.)
-
devi personalizzare il modo in cui le tue classi di immagini e suoni scrivono i dati usando, ma implementando:
private void writeObject (ObjectOutputStream out) genera IOException;
private void readObject (ObjectInputStream in) genera IOException, ClassNotFoundException;