【发布时间】:2015-05-24 19:40:24
【问题描述】:
在 C、C++ 中,如果您以二进制方式(例如 fwrite(&someInt,sizeof(int),1,fp))写入一个整数到文件,如果您想从不同的机器读取该整数,您需要考虑大量问题 - 例如,字节顺序问题、整数大小在其他计算机上可能会有所不同,浮点表示在不同计算机上可能会有所不同,负整数有不同的表示等。所以直接以二进制模式读写可能无法在不同计算机上工作。
在下面这个使用二进制阅读器(来自 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 类呢?
【问题讨论】:
-
您是否假设在所有机器上都使用相同的可执行文件?如果您必须在每台机器上重新编译,那么您会遇到同样的问题,因为您为 autoSaveTime 定义了一个“int”。现在,如果您改用 Int32 就可以了。
-
@jdweng:我不确定你的意思,但说是 - 我假设相同的可执行文件。但我也可能指的是通过网络从一台计算机向另一台计算机发送一个整数,等等。我认为在 C# 中 int32 是 int 的别名 .. 那么为什么会有区别?
-
如果您使用的是相同的可执行文件,那么整数大小的设置会内置到可执行文件中。所以它是便携的。是的,在 XP 上,整数始终是 32,但在 Win95 上不是,未来可能是 64。
标签: c# serialization binary