/// <summary> /// 对象会先进行二进制序列化, 然后以二进制方式向底层的流中写入(不大于4GB). /// </summary> /// <typeparam name="T">对象类型</typeparam> /// <param name="writer">流</param> /// <param name="obj">目标对象</param> /// <param name="writeLengthHeader">是否写入头. 如果为true, 将首先自动写入4个字节的头, 内容是对象序列化后的长度</param> /// <remarks>编码采用UTF8</remarks> public static void WriteBinaryObject <T>(this BinaryWriter writer, T obj, bool writeLengthHeader = true) { if (obj is null) { throw new ArgumentNullException(); } using MemoryStream mem = new MemoryStream(); int len = BinarySerializationHelper.Serialize(obj, mem); if (writeLengthHeader) { byte[] objectLenBytes = BitConverter.GetBytes(len); DebugHelper.WriteLine(string.Format("Write Length {0} as 4 Bytes header!", objectLenBytes.Length)); writer.Write(objectLenBytes); //write length as header } DebugHelper.WriteLine("Try to write object."); var objBytes = mem.GetBuffer(); writer.Write(objBytes); DebugHelper.WriteLine("Object wrote."); }
/// <summary> /// 把对象序列化到二进制流当中 /// </summary> /// <param name="objToSave">欲保存的对象(大小<=4GB)</param> /// <param name="stream">写入的流</param> /// <returns>流的长度</returns> public static int ToBinaryStream(this object objToSave, Stream stream) { return(BinarySerializationHelper.Serialize(objToSave, stream)); }
/// <summary> /// 把对象序列化到二进制文件中 /// </summary> /// <param name="objToSave">欲保存的对象</param> /// <param name="filename">包含路径的文件名</param> public static void ToBinaryFile(this object objToSave, string filename) { BinarySerializationHelper.Serialize(objToSave, filename); }
/// <summary> /// 序列化为字节数组 /// </summary> /// <param name="objToSave"></param> /// <returns></returns> public static byte[] ToBytes(this object objToSave) { return(BinarySerializationHelper.Serialize(objToSave)); }