【发布时间】:2012-10-31 18:53:18
【问题描述】:
我已经用 c# 编写了这个 protobuf 消息
-
C# 客户端:
public AddressBook InitializeAdressBook() { Person newContact = new Person(); AddressBook addressBookBuilder = new AddressBook(); Person john = new Person(); john.id=1234; john.name="John Doe"; john.email="jdoe@example.com"; Person.PhoneNumber nr = new Person.PhoneNumber(); nr.number="5554321"; john.phone.Add(nr); addressBookBuilder.person.Add(john); TextBox.Text += ("Client: Initialisiert? " + addressBookBuilder.ToString()) + "\t" + "\n"; TextBox.Text += " Erster Person " + addressBookBuilder.person.First().name + "\t" + "\n"; return addressBookBuilder; }
问题
我正在尝试将 protobuf 消息从 c# 客户端发送到此 java 服务器...
-
Java 服务器
public ControllerThread(Socket s){ this.s = s; try { AddressBook adb = AddressBook.parseFrom(s.getInputStream()); System.out.println("Server: Addressbook:" + adb.getPersonCount()); } catch (IOException e) { System.out.println("Server: BufferedReader oder PrintWriter von ThermoClient konnte nicht erstellt werden"); e.printStackTrace(); } }}
问题:
我应该将此消息序列化为字节数组,以便将其发送到 java 服务器... 不幸的是,方法 ProtoBuf.Serializer.Serialize 不返回字节数组。 那么如何将它序列化为字节数组并将其发送到我的 Java 服务器呢?任何帮助表示感谢!
【问题讨论】:
-
这很大程度上取决于您的服务器提供的通信协议
-
因此,使用 Builder 将其“序列化”为八位字节流,然后使用 Java 中合适的库对其进行“反序列化”。如果您从
.protobuf文件创建 Proto 对象,则应该有两种语言的自动绑定。请记住,ProtocolBuffers 是二进制的。 -
那么,“有什么问题?”创建数据。序列化数据。发送到某个地方。从某个地方读它。反序列化数据。使用数据。由于序列化技术已经制定出来,剩下的就是如何发送/发送读取数据,并且实际上与 ProtocolBuffers 没有太大关系(除非使用特定的 PB-server/RPC 实现)。
-
如何序列化数据?谢谢
标签: c# serialization network-programming protocol-buffers protobuf-net