C# BinaryWriter/BinaryReader、FileStream 、StreamWriter/StreamReader

来源:互联网 发布:mui.picker.min.js 编辑:程序博客网 时间:2024/06/09 00:33

C# I/O流 常用BinaryWriter/BinaryReader、FileStream 、StreamWriter/StreamReader。

1、FileStream
FileStream 详细介绍参考msdn
写数据:

            using (FileStream fs = new FileStream("File.FileStream", FileMode.Create, FileAccess.Write))            {                for (int i = 0; i < Cycles; i++)                {                    for (int j = 0; j < Length; j++)                    {                        dis[j] = i * Length + j;                    }                    Buffer.BlockCopy(dis, 0, byData, i * readCount, readCount);                }                fs.Write(byData, 0, byData.Length);            }

读数据

            using (FileStream fs = new FileStream("File.FileStream", FileMode.Open, FileAccess.Read))            {                for (int i = 0; i < Cycles; i++)                {                    fs.Seek(i * readCount, SeekOrigin.Begin);                    fs.Read(byData, 0, readCount);                    dis = new double[Length];                    Buffer.BlockCopy(byData, i * readCount, dis, 0, readCount);                }            }

2、BinaryWriter
BinaryWriter 详细介绍参考msdn

        using (BinaryWriter bw = new BinaryWriter(File.Open("File.Binary", FileMode.Create)))        {            byte[] data = new byte[Cycles * readCount];            for (int i = 0; i < Cycles; i++)            {                for (int j = 0; j < Length; j++)                {                    dis[j] = i * Length + j;                }                Buffer.BlockCopy(dis, 0, data, i * readCount, readCount);            }            bw.Write(data);        }

3、BinaryReader
BinaryReader 详细介绍参考msdn

            using (BinaryReader wr = new BinaryReader(File.Open("File.Binary", FileMode.Open)))            {                for (int i = 0; i < Cycles; i++)                {                    var readData = wr.ReadBytes(readCount);                    dis = new double[Length];                    Buffer.BlockCopy(readData, 0, dis, 0, readCount);                }            }

4、StreamWriter
StreamWriter 详细介绍参考msdn

            using (StreamWriter sw = new StreamWriter("File.Stream", false, Encoding.GetEncoding("utf-16")))            {                StringBuilder sb = new StringBuilder();                for (int i = 0; i < Cycles; i++)                {                    for (int j = 0; j < Length; j++)                    {                        dis[j] = i * Length + j;                        sb.AppendFormat("{0},", dis[j]);                    }                    sb.AppendFormat("\n");                }                sw.WriteLine(sb);            }

5、StreamReader
StreamReader 详细介绍参考msdn

            using (StreamReader sd = new StreamReader("File.Stream", Encoding.GetEncoding("utf-16")))            {                for (int i = 0; i < Cycles; i++)                {                    string[] ch = sd.ReadLine().Split(new Char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries);                    for (int j = 0; j < Length; j++)                    {                        double.TryParse(ch[j], out dis[j]);                    }                }            }

完整测试代码:

    class Program    {        static Stopwatch watch = new Stopwatch();        static void Main()        {            FileReadAndWrite fileReadAndWrite = new FileReadAndWrite();            watch.Restart();            fileReadAndWrite.BinaryWriterMethod();            watch.Stop();            Console.WriteLine("BinaryWriterMethod()消耗时间(ms): " + watch.ElapsedTicks.ToString());            watch.Restart();            fileReadAndWrite.BinaryReaderMethod();            watch.Stop();            Console.WriteLine("BinaryReaderMethod()消耗时间(ms): " + watch.ElapsedTicks.ToString());            watch.Restart();            fileReadAndWrite.FileStreamWriterMethod();            watch.Stop();            Console.WriteLine("FileStreamWriterMethod()消耗时间(ms): " + watch.ElapsedTicks.ToString());            watch.Restart();            fileReadAndWrite.FileStreamReadMethod();            watch.Stop();            Console.WriteLine("FileStreamReadMethod()消耗时间(ms): " + watch.ElapsedTicks.ToString());            watch.Restart();            fileReadAndWrite.StreamWriterMethod();            watch.Stop();            Console.WriteLine("StreamWriterMethod()消耗时间(ms): " + watch.ElapsedTicks.ToString());            watch.Restart();            fileReadAndWrite.StreamReaderMethod();            watch.Stop();            Console.WriteLine("StreamReaderMethod()消耗时间(ms): " + watch.ElapsedTicks.ToString());            watch.Restart();            fileReadAndWrite.StreamWriterMethod2();            watch.Stop();            Console.WriteLine("StreamWriterMethod2()消耗时间(ms): " + watch.ElapsedTicks.ToString());            watch.Restart();            fileReadAndWrite.StreamReaderMethod2();            watch.Stop();            Console.WriteLine("StreamReaderMethod2()消耗时间(ms): " + watch.ElapsedTicks.ToString());            Console.ReadKey(true);        }    }    class FileReadAndWrite    {        private const int Length = 1024;        private const int Cycles = 64;        private int readCount;        private byte[] byData;        private double[] dis;        public FileReadAndWrite()        {            readCount = Length * sizeof(double);            dis = new double[Length];            byData = new byte[Cycles * Length * sizeof(double)];        }        #region BinaryWriter\BinaryReader        public void BinaryWriterMethod()        {            using (BinaryWriter bw = new BinaryWriter(File.Open("File.Binary", FileMode.Create)))            {                byte[] data = new byte[Cycles * readCount];                for (int i = 0; i < Cycles; i++)                {                    for (int j = 0; j < Length; j++)                    {                        dis[j] = i * Length + j;                    }                    Buffer.BlockCopy(dis, 0, data, i * readCount, readCount);                }                bw.Write(data);            }        }        public void BinaryReaderMethod()        {            using (BinaryReader wr = new BinaryReader(File.Open("File.Binary", FileMode.Open)))            {                for (int i = 0; i < Cycles; i++)                {                    var readData = wr.ReadBytes(readCount);                    Buffer.BlockCopy(readData, 0, dis, 0, readCount);                }            }        }        #endregion        #region FileStream Read\Write        public void FileStreamWriterMethod()        {            using (FileStream fs = new FileStream("File.FileStream", FileMode.Create, FileAccess.Write))            {                for (int i = 0; i < Cycles; i++)                {                    for (int j = 0; j < Length; j++)                    {                        dis[j] = i * Length + j;                    }                    Buffer.BlockCopy(dis, 0, byData, i * readCount, readCount);                }                fs.Write(byData, 0, byData.Length);            }        }        public void FileStreamReadMethod()        {            using (FileStream fs = new FileStream("File.FileStream", FileMode.Open, FileAccess.Read))            {                for (int i = 0; i < Cycles; i++)                {                    fs.Seek(i * readCount, SeekOrigin.Begin);                    fs.Read(byData, 0, readCount);                    Buffer.BlockCopy(byData, i * readCount, dis, 0, readCount);                }            }        }        #endregion        #region StreamWriter\StreamReader        public void StreamWriterMethod()        {            using (StreamWriter sw = new StreamWriter("File.Stream", false, Encoding.GetEncoding("utf-16")))            {                StringBuilder sb = new StringBuilder();                for (int i = 0; i < Cycles; i++)                {                    for (int j = 0; j < Length; j++)                    {                        dis[j] = i * Length + j;                        sb.AppendFormat("{0},", dis[j]);                    }                    sb.AppendFormat("\n");                }                sw.WriteLine(sb);            }        }        public void StreamReaderMethod()        {            using (StreamReader sd = new StreamReader("File.Stream", Encoding.GetEncoding("utf-16")))            {                for (int i = 0; i < Cycles; i++)                {                    string[] ch = sd.ReadLine().Split(new Char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries);                    for (int j = 0; j < Length; j++)                    {                        double.TryParse(ch[j], out dis[j]);                    }                }            }        }        public void StreamWriterMethod2()        {            using (StreamWriter sw = new StreamWriter("File1.Stream", false, Encoding.UTF8))            {                for (int i = 0; i < Cycles; i++)                {                    for (int j = 0; j < Length; j++)                    {                        dis[j] = i * Length + j;                    }                    Buffer.BlockCopy(dis, 0, byData, i * readCount, readCount);                }                sw.WriteLine(Encoding.BigEndianUnicode.GetChars(byData));            }        }        public void StreamReaderMethod2()        {            using (StreamReader sd = new StreamReader("File1.Stream", Encoding.UTF8))            {                char[] chData = new char[readCount / sizeof(char)];                for (int i = 0; i < Cycles; i++)                {                    sd.Read(chData, 0, chData.Length);                    Buffer.BlockCopy(Encoding.BigEndianUnicode.GetBytes(chData), 0, dis, 0, readCount);                }            }        }        #endregion    }
阅读全文
0 0
原创粉丝点击