2011-12-15 9 views
5

Come posso convertire il mio Map<Integer, String> in byte[] e quindi scriverlo nella memoria interna? Al momento ho:Come convertire la Mappa in byte e salvarla nella memoria interna

 try { 
      FileOutputStream fos = context.openFileOutput(Const.FILE_CATEGORIES, Context.MODE_PRIVATE); 
      fos.write(null); 
     } catch (FileNotFoundException e) { 
      // reload and create the file again 
     } 

But..I non sanno come ottenere il Map nel formato corretto, e poi decodificare di nuovo al suo formato originale di una volta ho bisogno di caricare di nuovo. Devo ricreare questo file una volta alla settimana e caricarlo all'avvio dell'applicazione.

risposta

14
  1. Utilizzando la serializzazione in Java si può facilmente analizzare eventuali serializzabili oggetti alle flusso di byte. Prova a utilizzare ObjectInputStream e lo ObjectOuputStream .

  2. Utilizzare il json per ripristinare. Puoi utilizzare google-gson per convertire oggetti Java in JSON e viceversa.

  3. Utilizzare il pacchetto in Android. La classe android.os.Parcel è progettata per passare i dati tra i componenti di Android (attività, servizio), ma è comunque possibile utilizzarli per la persistenza dei dati. Ricorda solo di non inviare i dati a Internet poiché le diverse piattaforme potrebbero avere un algoritmo diverso per eseguire l'analisi.

Ho scritto una demo per la serializzazione, provo.

public static void main(String[] args) throws Exception { 
    // Create raw data. 
    Map<Integer, String> data = new HashMap<Integer, String>(); 
    data.put(1, "hello"); 
    data.put(2, "world"); 
    System.out.println(data.toString()); 

    // Convert Map to byte array 
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); 
    ObjectOutputStream out = new ObjectOutputStream(byteOut); 
    out.writeObject(data); 

    // Parse byte array to Map 
    ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); 
    ObjectInputStream in = new ObjectInputStream(byteIn); 
    Map<Integer, String> data2 = (Map<Integer, String>) in.readObject(); 
    System.out.println(data2.toString()); 
} 
+0

Questo approccio ha lo svantaggio che se la classe della mappa viene modificata, tutti i valori persistenti non sono validi. – belgther

0

In entrambi i serializzare come Faylon accennato, o implementare il proprio meccanismo per salvare e caricare la vostra mappa. Salvando, si itera su tutti gli elementi e si salvano coppie chiave-valore. Caricando, li aggiungi di nuovo. L'implementazione del tuo meccanismo ha il vantaggio che puoi ancora utilizzare i tuoi valori persistenti quando il tuo programma viene utilizzato con un'altra versione di Java.

Problemi correlati