문제

를 사용하여 google Protocul 버퍼, 가 서비스에서 이미 작성된 자바에서 자신의 데이터 구조를 이미입니다.을 사용하고 싶 pb 하는 메시지를 전달하고 내가 찾는 방법으로 직렬화하여 기존 데이터 구조에 있는 자바를 pb.시작할 수 있습으로 정의하는 모든 데이터 구조에서 pb 처음부터,아마 올바른 방법으로 하지만 내가 너무 게으르다.그래서 말하는 내가 사람에서 클래스 Java(또는 다른 언어를 지원)또는 비행기 등이 있는 수천만의 속성에,그것은이 방법으로 직렬화하는 클래스를 pb?할 수 있습니 pb 형식의 특성까?(할 때 비행기가 아닌 pb,그것은 Java 클래스)

도움이 되었습니까?

해결책

No,당신은 할 수 없습니다.필드에서 protobuf 메시지는 항상 기본 형식(숫자,문자열,바이트 배열,기본적으로),protobuf 열거(생성되는 Java 열거)또는 protobuf 메시지-반복한 버전의 모든 사람들은 물론이다.

당신은 잠재적으로 작성 도구를 사용하는 반사를 만들.proto 파일에 Java 클래스,하지만 난 의심 당신이 그것을 찾을 빨리 다만 그것을 할 수 있습니다.특히,당신 리플렉션을 사용하여 당신이 있는지 확인하려면 필드를 항상성과 동일한 이름을 유지하기 위해,호환성.한 가지 당신 지에 주석을 달 Java 클래스 코드를 작성하기를 생성.proto 파일을 기준으로 주석 또는 잠재적으로 직렬화를 직접 프로토 형식으로 사용할 수 있습니다.개인적으로 나를 만드는 것이 좋습니다.proto 에서 파일 방법보다 효과적으로 다시 쓰기 PB 프로젝트-그렇지 않으면 거기에 상당한 위험의 소개하는 버그가 있는 이미 철저히 테스트된 코드입니다.

는 경우 주석을 만들 수는 시스템,나는 확신을 갖 바르다(그리고 나머지의 PB 커뮤니티)에 관심이 있을 것 이라 볼 수 없도록 할 수 있습니다.

다른 팁

내가 생각할 수있는 한 가지 방법은 protobuf에 문자열 필드를 사용하고 Java의 원시 직렬화를 사용하여 해당 필드에 Java 클래스를 직렬화하는 것입니다. 이렇게하면 메시지 수신기가 읽기/사제를 읽는 방법을 알고 있다고 가정하면 Java를 Java 메시지로 쉽게 직렬화 할 수 있습니다.

그러나이 기술에는 단점이 있습니다. 몇 가지 이름 :

  1. Java에서 Java (C ++, Python 또는 기타 없음) 일뿐입니다.
  2. 기본 프로토 비가만큼 효율적이지 않습니다 (구문 분석/세리어 리조 틴이 현명하거나 메시지 크기가 현명하지 않음)
  3. 여러 곳에서 데이터 구조의 논리가 있고 일부는 Protobufs 정의 파일에, 일부는 다른 Java 클래스에 있으며, 이는 유지하기가 더 어려워집니다.

그러나 - 단기적으로 작업을 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top