다음과 같이 메시지를 정의 할 수 있습니다 버퍼 :
Message JSONObject {
required string JSON = 1;
}
Message DailyJSONLog {
repeated JSONObject JSON = 1;
}
이 방법 당신은 메모리에서 파일을 읽고 그것을 역 직렬화 것이다. 본질적으로 그것들을 직렬화하는 것과 같은 방식입니다. 디스크에 파일 (일련 번호 DailyJSONLog
)이 있으면 일련 번호 JSONObject
을 파일 끝 부분에 쉽게 추가 할 수 있습니다 (DailyJSONLog
메시지는 매우 단순한 반복 필드이기 때문에).
유일한 문제는 매일 많은 메시지가 있거나 하루 중 특정 위치에서 시작하려는 경우입니다 (중간에 (또는 임의적으로) 쉽게 도달 할 수없는 경우). 반복 목록).
나는 이것을 JSONObject
으로 가져 와서 그것을 직렬화 한 다음 base64로 인코딩했다. 나는이 파일을 새로운 줄로 구분하여 저장하고 싶다. 이렇게하면 각 파일에 몇 개의 레코드가 있는지 쉽게 볼 수 있고 파일 내의 임의의 JSON 객체에 액세스 할 수 있으며 파일을 쉽게 확장 할 수 있습니다. (위의 '반복되는'메시지도 확장 할 수 있지만 매우 단순합니다. 편도 쉬운 조작 ...)
압축은 다른 주제입니다. 프로토콜 버퍼는 문자열을 압축하지 않습니다. JSON 메시지와 일치하도록 pb 메시지를 정의한다면, pb가 어떤 정수라도 [varint][1]
인코딩 형식으로 '압축'할 수있는 이점을 얻을 수 있습니다. base64 인코딩 경로 이상으로 시도하면 '압축'이 줄어 듭니다.