gpt4 book ai didi

c# - BinaryReader、BinaryFormatter - 它们可移植吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:18 25 4
gpt4 key购买 nike

在 C、C++ 中,如果您以二进制方式写入一个整数(例如 fwrite(&someInt,sizeof(int),1,fp))说到文件,您有很多问题需要考虑你想从不同的机器上读取那个整数——例如,字节序问题,整数大小在其他计算机上可能不同, float 表示在不同计算机上可能不同,负整数有不同的表示等。所以直接以二进制模式读写可能不起作用跨不同的计算机。

在下面这个使用 Binary reader(来自 MSDN)的例子中,上述问题是否也适用?

using System;
using System.IO;

class ConsoleApplication
{
const string fileName = "AppSettings.dat";

static void Main()
{
WriteDefaultValues();
DisplayValues();
}

public static void WriteDefaultValues()
{
using (BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create)))
{
writer.Write(1.250F);
writer.Write(@"c:\Temp");
writer.Write(10);
writer.Write(true);
}
}

public static void DisplayValues()
{
float aspectRatio;
string tempDirectory;
int autoSaveTime;
bool showStatusBar;

if (File.Exists(fileName))
{
using (BinaryReader reader = new BinaryReader(File.Open(fileName, FileMode.Open)))
{
aspectRatio = reader.ReadSingle();
tempDirectory = reader.ReadString();
autoSaveTime = reader.ReadInt32();
showStatusBar = reader.ReadBoolean();
}

Console.WriteLine("Aspect ratio set to: " + aspectRatio);
Console.WriteLine("Temp directory is: " + tempDirectory);
Console.WriteLine("Auto save time set to: " + autoSaveTime);
Console.WriteLine("Show status bar: " + showStatusBar);
}
}
}

BinaryFormatter 类呢?

最佳答案

  • BinaryWriter 的字节顺序是固定的。它始终是小端。
  • 每种数据类型的整数大小始终相同:byte/sbyte 1B short/ushort 2B int/uint 4B 长/乌龙8B
  • Floats 和 Doubles 遵循 IEEE 标准
  • 使用BinaryReader/BinaryWriter 读取和写入将产生相同的结果。从 C# 到 Java,您需要翻转所有传入字节,因为 Java 使用 BigEndian
  • BinaryFormatter 用于序列化或反序列化同一台 PC 上的对象。将数据从一台 PC 传输到另一台 PC 时不应使用它。

如果您使用两个 C# 应用程序,只需使用 BinaryReader/BinaryWriter,它们是可移植的。如果另一端未使用 C# 编程,您很可能需要使用(或编写自己的)类来处理此类问题。

关于c# - BinaryReader、BinaryFormatter - 它们可移植吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30422556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com