Domanda

Qual è il modo migliore per conservare i dati tra programma viene eseguito in Java? So già che è possibile utilizzare un file di testo e memorizzare le informazioni in questo modo, ma mi chiedevo se esiste un modo migliore per memorizzare le informazioni che viene generato dal programma tra le esecuzioni del programma.

Inoltre, non v'è alcun modo per farlo in modo tale da mantenere le informazioni sicure? In particolare, voglio mantenere l'utente finale di essere in grado di accedervi.

È stato utile?

Soluzione

  

Mi chiedevo se ci fosse un modo   altre ponendo le informazioni che sono   genereated dal programma tra le esecuzioni   del programma?

È sufficiente utilizzare un ObjectOutputStream per serializzare in un file ed un ObjectInputStream per tornare indietro.

  

Inoltre v'è alcun modo per farlo in modo da   di mantenere le informazioni sicure? a partire dal   l'utente finale è in grado di accedervi?

Se il codice viene eseguito sul sistema dell'utente finale allora no, non v'è alcun modo per impedire loro di ottenere i dati - non è nemmeno degno il vostro tempo a cercare di codificare in qualche modo, dal momento che è facile collegare un debugger e controllare il programma di stato mentre è in esecuzione. Come un formato binario, Java serializzazione impedirà agli utenti non tecnici da decifrare, e che è praticamente il meglio che si possa sperare.

Altri suggerimenti

Non ho mai usato io stesso, ma penso che sia quello del JDK java.util.prefs.Preferences stato originariamente progettato per.

È possibile utilizzare proprietà per memorizzazione delle informazioni. Se si vuole rendere sicuro, gestito attraverso una sorta di flusso di crittografia .

La crittografia per i file, o un database locale con password.

Si potrebbe utilizzare db4o per memorizzare i dati. Si tratta di un database ad oggetti e supporta la crittografia.

Potreste essere interessati a quick'n'dirty persistenza per Java .

Qualcuno ha suggerito di utilizzare la serializzazione. Attenzione che ci sono un certo numero di svantaggi serializzazione.

  • Il problema delle versioni. Se si cambia qualcosa nelle classi che sono serializzati, file poi serializzati scritti con la vecchia versione del programma non può essere letto più facilmente.
  • Non si conosce il formato esatto del file. Sarà davvero difficile se si vuole scrivere un programma diverso tardi, possibilmente in un linguaggio di programmazione diversa, che ha bisogno di leggere il file.

serializzazione non è particolarmente adatto per la conservazione a lungo termine.

Io suggerirei di usare un piccolo database embedded, invece. (Un database incorporato è un database che viene eseguito nello stesso processo come programma). Si noti che Java di Sun include Java DB , che è una versione di Apache Derby. C'è anche HSQLDB , che è un altro piccolo e puro Java database che può essere utilizzato come un database incorporato.

La cosa migliore da utilizzare quando si inizia Java è quello di utilizzare un file di testo o ObjectOutputStream. Una volta che avete più esperienza allora si può utilizzare i database.

Come sulla serializzazione?

Non può essere letto dall'utente ed è relativamente facile.

Come altri hanno già detto, ci sono una miriade di modi per serializzare i dati. È possibile utilizzare qualcosa di leggero come SQLite o semplicemente serializzazione pianura. Basta rendersi conto che tutti i tentativi si fanno per crittografare i dati possono essere sconfitti, soprattutto nel caso di codice Java in quanto può essere facilmente invertita.

Tuttavia, se la maggior parte degli utenti non sono abbastanza tecnico per comprendere le complessità di reverse engineering di un programma Java per capire come decrittografare i dati, si dovrebbe essere in grado di cavarsela con alcuni metodi di crittografia di base come quello che è stato detto in un'altra risposta ed essere buono. Basta rendersi conto che ogni volta che qualche cosa risiede su una macchina che non controlli, non v'è alcun modo per mantenere gli utenti più persistenti da capire come crack.

Io personalmente suggerirei di usare SQLite e con qualche semplice crittografia sui dati che si mettono nei campi così se qualcuno è abbastanza intelligente da essere in grado di connettersi al DB file locali, hanno ancora a invertire l'algoritmo di crittografia in qualche modo . Il 99,9% degli utenti regolari non perdere tempo con questo livello di indagine.

XML come una tecnica di serializzazione è più resistente ai futuri cambiamenti nel vostro programma che regolerà l'archiviazione rispetto ai formati binari, come la serializzazione oggetto. Tuttavia che renderebbe molto leggibile e modificabile dalla maggior parte degli utenti.

Una molto semplice compressione / decompressione avrebbe smesso di quasi tutti gli utenti di ottenere il contenuto effettivo dei dati. L'uso di GZipInputStream / GZIPOutputStream intorno al vostro flusso di scrittura corrente farà il lavoro. Il più elaborata la vostra difesa contro indiscreti si ottiene tanto più essa avrà un impatto gli utenti del software.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top