प्रोटोकॉल बफ़र का इस्तेमाल करना

यहां एक छोटे से उदाहरण के ज़रिए बताया गया है कि अपने प्रोजेक्ट में प्रोटोकॉल बफ़र को कैसे शामिल करें.

यहां एक सरल प्रोटोकॉल बफ़र परिभाषा दी गई है: geo.proto

syntax = "proto2";

message Location {
  optional string name = 1;
  optional double latitude = 2;
  optional double longitude = 3;
}

और हमारा मुख्य Java प्रोग्राम, Hello.java:

class Hello {
  public static void main(String[] args) {
    Geo.Location.Builder locationBuilder = Geo.Location.newBuilder();
    locationBuilder.setName("CN Tower");
    locationBuilder.setLatitude(43.6412172);
    locationBuilder.setLongitude(-79.3884058);
    Geo.Location location = locationBuilder.build();
    System.out.println(location.toString());
  }
}

सबसे पहले, एक छोटा "प्रोजेक्ट" सेट अप:

export J2OBJC_HOME=~/j2objc    # Change to where the j2objc distribution was unzipped.
ls $J2OBJC_HOME/j2objc         # Fix above definition until this command works.
mkdir java objc classes        # Output directories

इसके बाद, प्रोटोकॉल बफ़र बनाने के लिए j2objc_protoc का इस्तेमाल करें. --java_out के साथ Java कोड और --j2objc_out के साथ मकसद-सी कोड जनरेट करें. हर फ़्लैग के साथ तय की गई वैल्यू, टारगेट भाषा के लिए आउटपुट डायरेक्ट्री होती है. दोनों आउटपुट भाषाएं एक ही निर्देश में जनरेट की जा सकती हैं.

$J2OBJC_HOME/j2objc_protoc --java_out=java --j2objc_out=objc geo.proto
ls java
Geo.java
ls objc
Geo.h Geo.m

जनरेट की गई Java Proto फ़ाइलों को कंपाइल करना ज़रूरी है, ताकि Hello में उनके लिए रेफ़रंस रिज़ॉल्व किए जा सकें. ऐसा javac का इस्तेमाल करके किया जाता है, ताकि इस चरण में अनुवाद को Objective C न किया जाए.

javac -source 1.8 -target 1.8 -bootclasspath $J2OBJC_HOME/lib/jre_emul.jar -cp $J2OBJC_HOME/lib/protobuf_runtime.jar -d classes java/*.java
ls classes/
Geo$1.class                 Geo$Location$Builder.class  Geo$LocationOrBuilder.class
Geo$Location$1.class        Geo$Location.class          Geo.class

हमेशा की तरह Java स्रोतों का अनुवाद करें, क्लासपाथ में कंपाइल किए गए java प्रोटो जोड़ें.

$J2OBJC_HOME/j2objc -cp classes:$J2OBJC_HOME/lib/protobuf_runtime.jar -d objc Hello.java
ls objc
Geo.h   Geo.m   Hello.h Hello.m

अब हमारे पास कंपाइल करने और लिंक करने के लिए, सभी Object-C स्रोत हैं. प्रोटोबफ़ रनटाइम शामिल करने के लिए, आपको libprotobuf_runtime.a लाइब्रेरी से लिंक करना होगा.

$J2OBJC_HOME/j2objcc -lprotobuf_runtime -o hello objc/*.m
./hello Hello
name: "CN Tower"
latitude: 43.6412
longitude: -79.3884