自己找了半天代码写的读二进制文件的代码,但是如果这个文件很大,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")
{
//...
}
}
下面那个把二进制数组转成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")
{
//...
}
}
希望解释一下内存映射文件
{
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
}
}
}
其实我就是问怎么分段读,而不是我那样一下子读进来。
而且我是想用binaryreader,filereader的我会的~~另外c += bufferDataSize;的话一个很大的文件读进来c最后不也是很大吗?
而且不用判断FileStream有没有读完吗?
另外,定义 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就可以了。
这要怎么做啊~
我的意思是说我从文件读出来了一堆byte,但是项目中是要操作字符串的,怎么样才能把byte数组转成字符串~