BinaryFormatter
时间: 2024-01-13 17:05:29 浏览: 16
BinaryFormatter是.NET Framework中的一种序列化器,用于将对象序列化为二进制格式,以便在网络上传输或存储在磁盘上。它可以将任何可序列化的.NET对象转换为二进制格式,包括自定义类、结构体等。它可以在不同的.NET应用程序之间进行序列化和反序列化操作,以实现数据交换和持久化。但需要注意的是,在.NET Core中,BinaryFormatter被标记为不安全,因为它可以导致反序列化漏洞,因此.NET Core默认禁用了BinaryFormatter。
相关问题
C#binaryformatter
C# BinaryFormatter 是一个用于序列化和反序列化 .NET 对象的类。它可以将对象转换为字节数组,以便在网络上传输或保存到文件中,也可以将字节数组转换回对象。
以下是一个简单的示例,演示如何使用 BinaryFormatter 将对象序列化为字节数组并将其保存到文件中:
```
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person { Name = "John", Age = 30 };
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, person);
byte[] bytes = stream.ToArray();
File.WriteAllBytes("person.dat", bytes);
}
}
```
在这个示例中,我们创建了一个名为 Person 的简单类,并使用 BinaryFormatter 将其序列化为字节数组。然后,我们使用 MemoryStream 将字节数组保存到内存中,并使用 File.WriteAllBytes 将其写入文件 "person.dat" 中。
反序列化对象的过程与序列化相反。以下是一个简单的示例,演示如何使用 BinaryFormatter 从文件中读取字节数组并将其反序列化为对象:
```
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
byte[] bytes = File.ReadAllBytes("person.dat");
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream(bytes);
Person person = (Person)formatter.Deserialize(stream);
Console.WriteLine("Name: {0}", person.Name);
Console.WriteLine("Age: {0}", person.Age);
}
}
```
在这个示例中,我们使用 File.ReadAllBytes 从文件 "person.dat" 中读取字节数组。然后,我们使用 MemoryStream 将字节数组加载到内存中,并使用 BinaryFormatter 将其反序列化为 Person 对象。最后,我们输出 Person 对象的属性值。
unity JsonUtility和BinaryFormatter区别
Unity中的`JsonUtility`和`BinaryFormatter`都是用来序列化和反序列化数据的工具,但它们有以下区别:
1. 数据格式不同:`JsonUtility`序列化后的数据是一个JSON字符串,而`BinaryFormatter`序列化后的数据是二进制的。
2. 可读性不同:由于`JsonUtility`序列化后的数据是一个JSON字符串,因此它具有可读性,可以直接在文本编辑器中查看和编辑。而`BinaryFormatter`序列化后的数据是一堆二进制数据,不可读。
3. 序列化效率不同:`BinaryFormatter`的序列化和反序列化速度较快,因为它直接将对象转换为二进制数据。而`JsonUtility`的序列化和反序列化速度相对较慢,因为它需要将对象转换为JSON字符串并解析JSON字符串。
4. 序列化精度不同:`JsonUtility`序列化后的数据精度更高,因为JSON字符串可以保留浮点数的小数点后面的位数,而`BinaryFormatter`不能。
综上所述,`JsonUtility`适合序列化和反序列化可读性较高、精度要求较高的数据,例如配置文件;`BinaryFormatter`适合序列化和反序列化性能要求较高、可读性要求不高的数据,例如游戏中的网络数据传输。