byte[] buffer = new byte[1024];
buffer = Encoding.UTF8.GetBytes(fileName);//fileName是string类型
我定义的buffer大小是1024 ,为什么在赋值之后就成了fileName的大小了呢。
这导致我之后的read.Read(buffer, 0, 1024);也出现越界的情况。请问怎么解决?原因是什么?
6 个解决方案
#1
你不是给变量buffer重新赋值了嘛。
#2
我最近好像也就在csdn找到这类问题了。
#3
byte数字型的声明在托管C#里面确实会自动增长,他的增长度是当前转换的字符串总长度减去当前byte声明长度,类似于C里面的指针循环单链表。
建议在读取read.Read的时候用byte长度来测试和读取。
建议在读取read.Read的时候用byte长度来测试和读取。
#4
FileStream fs = new FileStream("xxx", FileMode.Open);//xxx为文件路径
byte[] buffer = new byte[fs.Length];
fs.Write(buffer, 0, buffer.Length);
#5
第一行代码为buffer分配了1024字节的数组,第二行又为buffer
重新分配了filename长度字节数组,这两行代码为buffer分配的内存是没有关系的,而且事实上第一行的初始化工作是画蛇添足的。
代码可以这样写:
代码可以这样写:
byte[] buffer;
buffer = Encoding.UTF8.GetBytes(fileName);//fileName是string类型
// ...
read.Read(buffer, 0, buffer.Length);
#6
#1
你不是给变量buffer重新赋值了嘛。
#2
我最近好像也就在csdn找到这类问题了。
#3
byte数字型的声明在托管C#里面确实会自动增长,他的增长度是当前转换的字符串总长度减去当前byte声明长度,类似于C里面的指针循环单链表。
建议在读取read.Read的时候用byte长度来测试和读取。
建议在读取read.Read的时候用byte长度来测试和读取。
#4
FileStream fs = new FileStream("xxx", FileMode.Open);//xxx为文件路径
byte[] buffer = new byte[fs.Length];
fs.Write(buffer, 0, buffer.Length);
#5
第一行代码为buffer分配了1024字节的数组,第二行又为buffer
重新分配了filename长度字节数组,这两行代码为buffer分配的内存是没有关系的,而且事实上第一行的初始化工作是画蛇添足的。
代码可以这样写:
代码可以这样写:
byte[] buffer;
buffer = Encoding.UTF8.GetBytes(fileName);//fileName是string类型
// ...
read.Read(buffer, 0, buffer.Length);