最近在做一些.net转java的开发工作,碰到了一些在C#中相对比较容易处理,但是在java中不是那么容易处理,或者说,处理方案不是那么明显的问题。Protobuf序列化就是其中一个。
问题背景是:线上有若干的C#的WCF服务需要调用,由于我们的应用是先切换的,在对方服务不改变的情况下,要能做到我们切换成java之后,能够实现访问的平滑过渡。其中一部分服务的请求有对应的.proto契约文件,利用protoc工具可以生成对应的java文件,从而利用生成的java的类代码里的parseFrom方法,实现protobuf序列化;但是偏偏碰到了一个请求参数是String字符串类型的服务,由于没有proto文件,所以就不能生成对应的类,更没有对应的parseFrom方法,出现了难题。
在C#中,原来采用的protobuf-net.dll这个库,里面可以采用如下方式对字符串类型 (或者其他基本类型)进行序列化:
public static string SerializeObject(T obj) where T : class
{
string result = "";
try{
using (MemoryStream stream = new MemoryStream()){
Serializer.Serialize(stream, obj);
result = System.Convert.ToBase64String(stream.ToArray());
//序列化方式
result = string.Format("{0}{1}