استفاده از بافرهای پروتکل

در اینجا یک مثال سریع برای نشان دادن نحوه گنجاندن بافرهای پروتکل در پروژه خود آورده شده است.

در اینجا یک تعریف بافر پروتکل ساده، geo.proto :

syntax = "proto2";

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

و برنامه اصلی جاوا ما 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 و کد Objective-C با --j2objc_out کنید. مقدار مشخص شده با هر پرچم، دایرکتوری خروجی برای زبان مقصد است. هر دو زبان خروجی را می توان در یک دستور تولید کرد.

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

فایل های پروتوی جاوا تولید شده باید کامپایل شوند تا ارجاعات به آنها در 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

منابع جاوا را طبق معمول ترجمه کنید و پروتوهای جاوای کامپایل شده را به مسیر کلاس اضافه کنید.

$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

اکنون ما همه منابع Objective-C خود را برای کامپایل و پیوند داریم. شما باید با کتابخانه libprotobuf_runtime.a پیوند دهید تا زمان اجرای پروتوباف را در بر بگیرد.

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