Bundle
객체는 Parcel
S를 지원하지만, Parcel.marshall()
documentation는 말한다 :
(등 네트워크를 통해, 로컬 디스크에) 당신이 가 영구 저장소의 모든 종류에 배치 할 수 없습니다합니다 여기에 검색 데이터입니다. 이를 위해서는 표준 직렬화 또는 다른 종류의 일반 직렬화 메커니즘을 사용해야합니다. Parcel 마셜 화 표현은 로컬 IPC에 대해 매우 최적화되어 있으므로 다른 플랫폼 버전에서 작성된 데이터와의 호환성을 유지하려고 시도하지 않습니다.
easist 직렬화 메커니즘은 읽을 수있는 텍스트 형식 인 JSON 일 수 있습니다. 당신이 JSONObject
/JSONArray
객체의 트리 구성해야 JSON 문자열을 만들려면 당신은 바이너리 인코딩과 공간을 절약하려면
// write
JSONObject json = new JSONObject();
json.put("u", mp);
JSONArray mealplan_json = new JSONArray();
mealplan_json.put(...); // fill arrays recursively
json.put("m", mealplan_json);
String text = json.toString();
// read
JSONObject json = new JSONObject(text);
mp = json.getString("u");
JSONArray mealplan_json = json.getJSONArray("m");
...
, 당신은 기본 유형을 지원 직렬화를 사용해야하고 제대로 java.io.Serializable를 구현하는 객체는 : 당신은 확인이 앱 쓰기의 모든 버전과 읽을 그래서
// write
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(mp);
oos.writeObject(mealplan);
oos.close();
byte[] bytes = bos.toByteArray();
// read
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bis);
mp = (String) ois.readObject();
mealplan = (String[][][][]) ois.readObject();
이 바이너리 직렬화 어떤 키 이름을 ("U", "m")에 저장하지 않음을 유의하시기 바랍니다 그 안에있는 같은 물건들. 아마 주문.
키/값 구조가 필요한 경우 앞에 별도의 키 문자열로 값을 쓰고 임의의 수의 키/값 쌍을지도로 읽는 자체 헬퍼 함수를 구현해야합니다. 는 다른 방법으로, 원하는 요소를 포함 자신의 직렬화 객체를 생성 (이 클래스는 향후 앱 버전에서 호환 유지 것을 알아서) : 한 Bundle
객체가 있고 그 구조를 알 수없는 경우
class MealPlanData implements Serializable {
String u;
String[][][][] mp;
};
키/값을 수동으로 처리해야합니다.
// write
oos.writeInt(bundle.size());
for (String key : bundle.keySet()) {
Object value = bundle.get(key);
oos.writeObject(key);
oos.writeObject(value);
}
// read
int size = ios.readInt();
Map<String, Object> map = new ArrayMap<String, Object>();
for (int i = 0; i < size; i++) {
String key = (String) ios.readObject();
Object value = ios.readObject();
map.put(key, value);
}
blob 허용 배열 문자열 유형 데이터 .. 이미지 배열과 유사합니다. 우리는이 목적으로 만 BLOB를 사용했습니다. – Saveen