自己找了半天代码写的读二进制文件的代码,但是如果这个文件很大,buffer = br.ReadBytes(length)这句肯定执行起来特费劲,我CPU直接100%了。。能不能够逐行读文件呢~~或者指定一次读取byte数组的大小。
下面那个把二进制数组转成16进制字符串的好像写的也很傻。。

FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                        BinaryReader br = new BinaryReader(fs);
                        int length = (int)fs.Length;
                        byte[] buffer = new byte[length];
                        buffer = br.ReadBytes(length);
                        parseByte(buffer);private void parseByte(byte[] buffer)
        {
            string str = "";
            for(int i = 0; i < buffer.Length; i++)
            {
                str += Convert.ToString(buffer[i],16);
            }
            string signature = str.Substring(0,16);
            if (signature == "CFAD12FE C6FD746F")
            {
                //...
            }
        }

解决方案 »

  1.   

    仔细看了你的题目,我觉得你的问题应该还不需要使用内存映射文件,使用ReadBytes()本来就是只读取部分数据(缓冲区大小),你应该仔细检查你的代码的其它逻辑。
      

  2.   

    顶phy
    希望解释一下内存映射文件
      

  3.   

    晕,看了你的代码你是一次性把文件就读进来了,那当然是慢了,看看我这个……class Program
    {
        static int BufferSize = 100;
        static void Main(string[] args)
        {
            FileStream fs = new FileStream(@"E:\desktop\2.xml", FileMode.Open, FileAccess.Read);        int c = 0;
            while (true)
            {
                byte[] buffer = new byte[BufferSize];
                int bufferDataSize = fs.Read(buffer, c, BufferSize);        //读取出BufferSize大小的数据
                c += bufferDataSize;
                // 在这里处理你的程序。注意Buffer中数据的真实大小是bufferDataSize
            }
        }
    }
      

  4.   

    谢谢了~
    其实我就是问怎么分段读,而不是我那样一下子读进来。
    而且我是想用binaryreader,filereader的我会的~~另外c += bufferDataSize;的话一个很大的文件读进来c最后不也是很大吗?
    而且不用判断FileStream有没有读完吗?
      

  5.   

    这个一堆buffer读到之后, 怎么把他累积起来成一个文本啊。。
      

  6.   

    把你的byte用StreamWriter写回去。
      

  7.   

    学会了,太感谢了~~
    另外,定义 int bodySize = 512;
             int usedSize = XXX;//通过其他方法计算得到,比如500
              byte[] data = new byte[bodySize];
              fs.Read(data, 0, bodySize);
                                        
              string file = Encoding.Default.GetString(data);
    这时候是把data整个数组转化为字符串了,但是实际使用的大小是usedSize,
    转化的时候是不是应该限定转化该数组的前usedSize个byte就可以了。
    这要怎么做啊~
      

  8.   


    我的意思是说我从文件读出来了一堆byte,但是项目中是要操作字符串的,怎么样才能把byte数组转成字符串~