Python中的Java Protobuf解码

时间:2019-08-06 13:11:40

标签: java python android protocol-buffers

我一直在墙上砸头,试图获取我们使用的适用于R代码和swift代码的python脚本,也适用于Andorid(java)代码。使用相同的原始文件进行编码,没有任何效果。

最终尝试使用包装在.parseFrom()中的.build()。toByteArray()。因此,基本上将protobuf消息更改为字节数组,然后将其更改回为proto消息。然后使用writeDelimitedTo()将其写入文件。

因此,第二步(.parseFrom())应该只颠倒第一步(.toByteArray())。但这却有所不同。现在并不重要,只是好奇。


    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        String path = this.getExternalFilesDir(null) + "/ProtoBufTwar/";
        File directory = new File(path);
        FileOutputStream fosHeader = null;
        if(!directory.exists())
        {
            Log.d(TAG, "onCreate: ");
            directory.mkdirs();
        }

        File file = new File(directory, "hello3.txt");

        ResearchEncoding.Header header2 = null;
        try {
            header2 = ResearchEncoding.Header.parseFrom(ResearchEncoding.Header.newBuilder()
                    .setDeviceID("kjdshfkjsdhfkdshkjfdsf")
                    .setModelName("Samsun")
                    .setModelNumber("galaxy")
                    .setOsVersion("4")
                    .setAppVersion("46")
                    .setTimezone("mrlnougnr")
                    .build().toByteArray());
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }


        try {
            fosHeader = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try{
            header2.writeDelimitedTo(fosHeader);
            }catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fosHeader!=null){
                try {
                    fosHeader.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        Log.d(TAG, "onCreate: after header");


        ResearchEncoding.AccelGyroEvent event2 = null;

        try {
            event2 = ResearchEncoding.AccelGyroEvent.parseFrom(ResearchEncoding.AccelGyroEvent.newBuilder()
                    .setTimestamp(123133213)
                    .setX((float) 4.5)
                    .setY((float) 4.3)
                    .setZ((float) 4.7)
                    .build().toByteArray());
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(file,true);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            event2.writeDelimitedTo(fos);
            //event.writeTo(fos);
        } catch (IOException e) {
            e.printStackTrace();
        }



        Log.d(TAG, "onCreate: event: evetnt " + event.toString() );


    }
}```

0 个答案:

没有答案