class xuliehua { static void Main(string[] args) { JamesBondCar car = new JamesBondCar(); car.canFly = true; SaveAsBinaryFormat(car, "carBinaryData.dat"); LoadFromBinaryFormat("carBinaryData.dat"); SaveAsSoapFormat(car,"carSoapData.dat"); LoadFromSoapFormat("carSoapData.dat"); SaveAsXmlFormat(car,"carXmlData.dat"); LoadFromXmlFormat("carXmlData.dat");
int count; //从程序外部获取byte数组 byte[] byteArray = getByteData(); char[] charArray; UnicodeEncoding uniEncoding = new UnicodeEncoding(); //创建MemoryStream内存流类的实例 MemoryStream memStream = new MemoryStream(byteArray); count = 0; //显示内存流类实例的属性 Console.WriteLine( "容量:{0}/t数量:{1}/t当前位置:{2}", memStream.Capacity.ToString(), memStream.Length.ToString(), memStream.Position.ToString()); memStream.Seek(0, SeekOrigin.Begin);//将当前位置指定为流开始处 byteArray = new byte[memStream.Length]; count = memStream.Read(byteArray, 0, 20);//从流中读取前20个字节 while (count < memStream.Length)//逐个读取剩下的字节 { byteArray[count++] = Convert.ToByte(memStream.ReadByte()); } //将字节数组转换为字符数组并显示出来 charArray = new char[uniEncoding.GetCharCount(byteArray, 0, count)]; uniEncoding.GetChars(byteArray, 0, count, charArray, 0); Console.WriteLine(charArray); Console.ReadLine();
} private static byte[] getByteData()//获取外部字节数组的方法 { UnicodeEncoding uniEncoding = new UnicodeEncoding(); byte[] result = uniEncoding.GetBytes("memStream示例测试字符串"); return result; } //binary序列化 static void SaveAsBinaryFormat(object objGraph, string fileName) { BinaryFormatter bf = new BinaryFormatter(); using( Stream fs=new FileStream (fileName,FileMode.Create,FileAccess.Write,FileShare.None)) { bf.Serialize(fs, objGraph); } Console.WriteLine("=>Saved car in binary format"); } //binary反序列化 static void LoadFromBinaryFormat(string fileName) { BinaryFormatter bf = new BinaryFormatter(); using(Stream fs=File.OpenRead(fileName)) { JamesBondCar car = (JamesBondCar)bf.Deserialize(fs); Console.WriteLine("Can Fly ? : {0}", car.canFly); } } //Soap 序列化 static void SaveAsSoapFormat(object objGraph, string fileName) { SoapFormatter sf = new SoapFormatter(); using (Stream fs = new FileStream (fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { sf.Serialize(fs, objGraph); } Console.WriteLine("=>Saved car in Soap format"); } //Soap反序列化 static void LoadFromSoapFormat(string fileName) { SoapFormatter sf = new SoapFormatter(); using (Stream fs = File.OpenRead(fileName)) { JamesBondCar car=(JamesBondCar) sf.Deserialize(fs); Console.WriteLine("Can Fly ? : {0}", car.canFly); } } //Xml序列化 static void SaveAsXmlFormat(object objGraph, string fileName) { XmlSerializer xs = new XmlSerializer(typeof(JamesBondCar), new Type[] { typeof(Radio),typeof(Car)}); using (Stream fs = new FileStream (fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { xs.Serialize(fs, objGraph); } Console.WriteLine("=>Saved car in XML format"); } //Xml反序列化 static void LoadFromXmlFormat(string fileName) { XmlSerializer xs = new XmlSerializer(typeof(JamesBondCar), new Type[] { typeof(Radio), typeof(Car) }); using (Stream fs = File.OpenRead(fileName)) { JamesBondCar car = (JamesBondCar)xs.Deserialize(fs); Console.WriteLine("Can Fly ? : {0}", car.canFly); } } } [Serializable] public class Radio { public bool hasTweeters; public bool hasSubWoofers; public double[] stationPresets; public string radioID = "XF-552RR6"; } [Serializable] public class Car { [NonSerialized] public Radio radio = new Radio(); public bool isHatchBack; } [Serializable] public class JamesBondCar : Car { public bool canFly; public bool canSubmerge; }
特别要注意,其中,FileStream 和,MemoryStream
^_^。