code: package com.lody.virtual.server.vs;
  
  import android.os.Parcel;
  import android.util.SparseArray;
  
  import com.lody.virtual.helper.PersistenceLayer;
  import com.lody.virtual.os.VEnvironment;
  
  import java.util.Arrays;
  import java.util.HashMap;
  import java.util.Map;
  
  /**
   * @author Lody
   */
  
  class VSPersistenceLayer extends PersistenceLayer {
  
      private static final char[] MAGIC = {'v', 's', 'a'};
      private static final int CURRENT_VERSION = 1;
      private final VirtualStorageService mService;
  
      VSPersistenceLayer(VirtualStorageService service) {
          super(VEnvironment.getVSConfigFile());
          this.mService = service;
      }
  
      @Override
      public int getCurrentVersion() {
          return CURRENT_VERSION;
      }
  
      @Override
      public void writeMagic(Parcel p) {
          p.writeCharArray(MAGIC);
      }
  
      @Override
      public boolean verifyMagic(Parcel p) {
          char[] magic = p.createCharArray();
          return Arrays.equals(magic, MAGIC);
      }
  
  
      @Override
      public void writePersistenceData(Parcel p) {
          final SparseArray<HashMap<String, VSConfig>> configs = mService.getConfigs();
          int N = configs.size();
          p.writeInt(N);
          while (N-- > 0) {
              int userId = configs.keyAt(N);
              Map<String, VSConfig> userMap = configs.valueAt(N);
              p.writeInt(userId);
              p.writeMap(userMap);
          }
  
      }
  
      @Override
      public void readPersistenceData(Parcel p) {
          final SparseArray<HashMap<String, VSConfig>> configs = mService.getConfigs();
          int N = p.readInt();
          while (N-- > 0) {
              int userId = p.readInt();
              //noinspection unchecked
              HashMap<String, VSConfig> userMap = p.readHashMap(VSConfig.class.getClassLoader());
              configs.put(userId, userMap);
          }
      }
  
      @Override
      public boolean onVersionConflict(int fileVersion, int currentVersion) {
          return false;
      }
  
  
      @Override
      public void onPersistenceFileDamage() {
  
      }
  }
  