我有代表具有两个属性的汽车的类。我想将其转换为byte []并将其保存为二进制文件。
class Car
{
private string type;
private int id;
public Car(string paType, int paId)
{
type = paType;
id = paId;
}
public byte[] ByteConverter()
{
byte[] bArr = new byte[14];
byte[] hlpType = Encoding.UTF8.GetBytes(this.type);
byte[] hlpId = BitConverter.GetBytes(this.id);
hlpType.CopyTo(bArr, 0);
hlpId.CopyTo(bArr, hlpType.Length);
return bArr;
}
}
保存方法正文:
Car c = new Car("abcd", 12);
FileStream fsStream = new FileStream("cardata.bin", FileMode.Create);
fsStream.Write(c.ByteConverter(), 0, 14);
fsStream.Close();
如果我打开文件cardata.dat,则有字符串。
ABCD
如何解决这个问题?感谢。
答案 0 :(得分:1)
如果您想要从文件显式保存/加载(type
然后保留id
格式),您可以将其设为
private void SaveToFile(string fileName) {
File.WriteAllBytes(fileName, Encoding.UTF8
.GetBytes(type)
.Concat(BitConverter.GetBytes(id))
.ToArray());
}
private void LoadFromFile(string fileName) {
byte[] data = File.ReadAllBytes(fileName);
type = Encoding.UTF8.GetString(data
.Take(data.Length - sizeof(int))
.ToArray());
id = BitConverter.ToInt32(data, data.Length - sizeof(int))
}
答案 1 :(得分:0)
您需要将对象Car转换/序列化为字节数组
public static byte[] CarToByteArray(Car car)
{
BinaryFormatter binf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
binf.Serialize(ms, car);
return ms.ToArray();
}
}