ProtoBuf测试手记
恰好,在测试ProtoBuf的过程中遇到了问题,特借宝地记录下测试的情况,有朋友遇到我类似情况的,一起交流一下吧。
//[ProtoContract]
//public class IPArrays
//{
// private IPArray[] arr = null;
// private int key;
// [ProtoMember(1)]
// public IPArray[] Arr
// {
// get
// {
// return this.arr;
// }
// set
// {
// this.arr = value;
// }
// }
// [ProtoMember(2)]
// public int Key
// {
// get
// {
// return this.key;
// }
// set
// {
// this.key = value;
// }
// }
//}
//[ProtoContract]
//public class IPArray
//{
// private int[] arr = null;
// [ProtoMember(1)]
// public int[] Arr
// {
// get
// {
// return this.arr;
// }
// set
// {
// this.arr = value;
// }
// }
// [ProtoMember(2)]
// public string IP
// {
// get
// {
// StringBuilder builder = new StringBuilder();
// for (int i = 0; i < this.arr.Length; i++)
// {
// builder.Append(".");
// builder.Append(this.arr[i].ToString());
// }
// return builder.ToString().Substring(1);
// }
// set
// {
// string[] textArray = value.Split(".".ToCharArray());
// for (int i = 0; i < this.arr.Length; i++)
// {
// this.arr[i] = int.Parse(textArray[i]);
// }
// }
// }
//}
{
}
面就是我定义的结构体,将全世界的IP和国家的对照表倒入此结构体中。且不说这种方式好与坏,因为今天讨论的是为什么protobuf序列化出来的问题体积那么大的问题(有可能和用了自定义的IpArray有关系,这个还没测到)。思路是:假如客户端IP为58.133.198.5,则对此IP做分割,首先在字典IPArraysArr 中查key为58的IPArrays。
this.Arr[133].Arr[198]通过IP的第二和第三个段就可以得到国家ID了,因为在国家的前提下,第四段被分拆的可能性非常小。
关于IP和国家对照库的设计思路就不过多讲了,因为这个设计实在是太差劲了,还有很大的优化空间。
情况就是这样,我也搞不清楚为什么ProtoBuf会序列化出来那么大一个文件。高手们请指教。