关于byte[] buffer = new byte[1024];的一个小问题

时间:2022-02-13 14:30:08

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长度来测试和读取。

#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


该回复于2015-05-04 14:45:54被管理员删除

#1


你不是给变量buffer重新赋值了嘛。

#2


我最近好像也就在csdn找到这类问题了。

#3


   byte数字型的声明在托管C#里面确实会自动增长,他的增长度是当前转换的字符串总长度减去当前byte声明长度,类似于C里面的指针循环单链表。

   建议在读取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


该回复于2015-05-04 14:45:54被管理员删除