我一直在墙上砸头,试图获取我们使用的适用于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() );
}
}```