java存储protobuf_protobuf对象二进制序列化存储(详解)

本文详细介绍了如何使用Java进行protobuf对象的二进制序列化和反序列化。通过示例代码展示了如何利用protobuf库,创建文件并进行序列化存储,以及从文件中读取反序列化数据。同时,提供了序列化到内存和从内存反序列化的辅助方法。
摘要由CSDN通过智能技术生成

首先下载protobuf库,可以用Nuget。

demo:

using System;

namespace Tools

{

public class BufHelp

{

///

/// 对象锁

///

private readonly static Object Locker = new Object();

/

/ 读写分离锁

/

/ aaaaa

//private static ReaderWriterLockSlim rwl = new ReaderWriterLockSlim();

///

/// 序列化-表字段业务信息

///

public static bool ProtoBufSerialize(T model, string filename) where T : class

{

try

{

string binpath = Config.KeyCenter.KeyBaseDirectory + @"Config\";

if (!System.IO.Directory.Exists(binpath))

System.IO.Directory.CreateDirectory(binpath);

lock (Locker)

{

using (var file = System.IO.File.Create(binpath + filename))

{

ProtoBuf.Serializer.Serialize(file, model);

return true;

}

}

}

catch

{

return false;

}

}

public static T ProtoBufDeserialize(string filename) where T : class

{

var dbpath = Config.KeyCenter.KeyBaseDirectory + @"Config\" + filename;

if (System.IO.File.Exists(dbpath))

{

lock (Locker)

{

using (var file = System.IO.File.OpenRead(dbpath))

{

var result = ProtoBuf.Serializer.Deserialize(file);

return result;

}

}

}

return default(T);

}

}

}///

/// 序列化

///

public static string Serialize(T t) where T : class

{

using (MemoryStream ms = new MemoryStream())

{

ProtoBuf.Serializer.Serialize(ms, t);

return Encoding.UTF8.GetString(ms.ToArray());

}

}

///

/// 反序列化

///

public static T DeSerialize(string content) where T : class

{

using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content)))

{

T t = ProtoBuf.Serializer.Deserialize(ms);

return t;

}

}

以上这篇protobuf对象二进制序列化存储(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2017-02-13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值