欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-16 17:00:35
...

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 需要任何配置。此外,零要求属性是虚拟的。

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