public byte[] toByteArray() {
   Map<String, byte[]> datas = new HashMap<>();
   Iterator<Map.Entry<String, Property>> itr = propMap.entrySet().iterator();
   while (itr.hasNext()) {
     Map.Entry<String, Property> entry = itr.next();
     Property prop = entry.getValue();
     datas.put(prop.key, prop.value.getBytes());
   }
   return EncodeUtil.toByteArray(datas);
 }
  public void fromByteArray(byte[] buffer) throws IOException {
    try {
      Map<String, byte[]> datas = EncodeUtil.toKeyValue(buffer);

      Iterator<Map.Entry<String, Property>> itr = propMap.entrySet().iterator();
      while (itr.hasNext()) {
        Map.Entry<String, Property> entry = itr.next();
        Property prop = entry.getValue();

        byte[] value = datas.get(prop.key);
        if (value != null) {
          // 値が書き込まれていた場合はそちらを優先
          prop.value = new String(value);
        } else {
          // 値が書き込まれていないので、デフォルトを復元
          prop.value = prop.defaultValue;
        }
      }
    } catch (Exception e) {
      LogUtil.log(e);
      throw new IOException("Format Error");
    }
  }