Salar.Bois一款紧凑、快速且功能强大的二进制序列化器

Salar.Bois 是 .NET 代码和 .NET 框架中最紧凑、最快速的二进制序列化器。

  • 无需压缩,高紧凑比是 Bois 格式的结果。
  • 无配置。
  • 没有更改您的类。
  • 压缩作为单独的包提供。

Why Salar.Bois?

  • 因为有效负载大小很重要。Bois 序列化器生成最小的有效负载大小。
  • 因为速度很重要。序列化和反序列化都非常快速。
  • 易于使用,是所有你需要的。Serialize<T>Deserialize<T>
  • 无需配置。无需 sperate 架构。

NuGet 包

PM> Install-Package Salar.Bois

LZ4 压缩包装包

PM> Install-Package Salar.Bois.LZ4

开始:

它易于使用,只需将包添加到您的项目和 voila,您现在可以使用它。

您只需调用方法。Serialize

BoisSerializer.Initialize<Person>();
var boisSerializer = new BoisSerializer();

using (var mem = new MemoryStream())
{
	boisSerializer.Serialize(personInstance, mem);

	return mem.ToArray();
}

注意:根本不需要调用,但如果应用程序的性能对您很重要,最好在应用程序开始时调用。BoisSerializer.Initialize

下面是完整的示例:

public class Project
{
	public int ID { get; set; }
	public string Name { get; set; }
	public string Description { get; set; }
	public string ProjectUrl { get; set; }
	public Version Version { get; set; }
}

class Program
{
	static void Main()
	{
		// Initialize is optional, but recommended for better performance
		BoisSerializer.Initialize<Project>();

		var projectInstance = new Project()
		{
			ID = 1,
			Name = "Salar.Bois",
			ProjectUrl = "https://github.com/salarcode/Bois",
			Version = new Version(3, 0, 0, 0),
			Description = "Salar.Bois is a compact, fast and powerful binary serializer for .NET Framework."
		};

		var boisSerializer = new BoisSerializer();

		using (var file = new FileStream("output.data", FileMode.Create))
		{
			boisSerializer.Serialize(projectInstance, file);
		}

		// All done.

		// ...
		// if you want to have more compression using LZ4 wrapper

		var boisLz4Serializer = new BoisLz4Serializer();

		using (var file = new FileStream("output-compressed.data", FileMode.Create))
		{
			boisLz4Serializer.Pickle(projectInstance, file);
		}

	}
}

如何反序列化对象:

var boisSerializer = new BoisSerializer();
return boisSerializer.Deserialize<Project>(dataStream);

// and the compressed data
var boisLz4Serializer = new BoisLz4Serializer();
return boisLz4Serializer.Unpickle<Project>(dataStream);

定义对象

没有什么特别的东西是真正需要的。只是这些简单的小规则。

  • 具有无参数的公共构造函数。
  • 集合/列表应为通用集合,并实现 ICollection<>、IList<>或 I字典<>

压缩

类位于名为 的单独包中。它提供给任何寻求更紧凑的序列化的人。要使用它,只需创建一个新的实例 ,并序列化和压缩对象调用,并取消序列化和解压缩调用。请注意,目前-是作为围绕LZ4的包装实现的。BoisLz4SerializerSalar.Bois.LZ4BoisLz4SerializerPickleUnpickleBoisLz4Serializer

Why Salar.Bois?

如果你有兴趣知道Salar.Bois是如何获得这个惊人的紧凑格式,看看它的Bois格式维基页面。

Bois 格式架构.

基准

基准源代码可用。每个运行时间都计算为 5000 次迭代 (v3.0)。

请注意,在这些测试中,Bois 不需要任何配置,而 Avro、Zero、MsPack 和 ProtoZBuff 需要任何配置。此外,零要求属性是虚拟的。

-针对:具有小数据的数组类型

发布了18 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_28368039/article/details/99947118
今日推荐