将字节数组保存到二进制文件

时间:2017-11-15 12:32:12

标签: c#

我有代表具有两个属性的汽车的类。我想将其转换为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

如何解决这个问题?感谢。

2 个答案:

答案 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();
    }
}