byte数组大小问题

string msg = "我是我是我是我是我是";
byte[] buffer = new byte[4];
buffer = Encoding.Unicode.GetBytes(msg);
string result = Encoding.Unicode.GetString(buffer);
Console.WriteLine(result);
byte数组的长度是4,这么长的字符串为什么还能放进去而没被截断,初始化byte数组的4到底代表什么,忘高人指点
1楼说清楚点

我做了个测试:
string msg = "我是我是我是我是我是";
Byte[] b = Encoding.Unicode.GetBytes(msg);
MemoryStream ms = new MemoryStream(b);
byte[] buffer = new byte[4];
ms.Read(buffer, 0, (Int32)ms.Length);
// buffer = Encoding.Unicode.GetBytes(msg);
string result = Encoding.Unicode.GetString(buffer);
Console.WriteLine(result);
Console.ReadLine();
这个代码就会报错,说数组超过大小。
但是你的那个代码为什么没报错呢?因为数组是引用类型;
虽然你 开始 初始化了 长度为4;
但是你后来又写了 buffer= Encoding.Unicode.GetBytes(msg);
右边这个是一个长度为20的字节数组,由于byte []是引用类型,他的数据是放在称为“堆”的内存区域中,所以指向了一个新的引用,即Encoding.Unicode.GetBytes(msg); 所以即使长度变多了也不会报错。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-28
1 byte = 1字节 = 8bit
一个unicode 表示的汉字 = 2字节 = 16bit
byte[] buffer = new byte[4]; 的意思是 新建了一个,byte类型的数组,长度为4,也就是说 这个数组中有 四个 byte,整个数组的大小 =4 * 1字节=4个字节

string msg = "我是我是我是我是我是"; 占 20个字节

逻辑上看,是装不进去的,数组会越界
第2个回答  2010-05-28
数组长度是16好不,byte的长度才是

byte数组大小问题
右边这个是一个长度为20的字节数组,由于byte []是引用类型,他的数据是放在称为“堆”的内存区域中,所以指向了一个新的引用,即Encoding.Unicode.GetBytes(msg); 所以即使长度变多了也不会报错。

Java中一个byte是多少个字节,如果byte数组的长度是1024,是1mb的大小...
1MB = 1024 KB 所以如果byte数组的长度是1024,应该是1KB的大小

byte[]字节数组的问题
byte[1]长度为1,只能放一个字节,花括号就是数组元素以逗号隔开,new byte[]{-46}就是包含一个字节的数组,这个数组的第一个元素是-46

javaew byte[1024];是指b中可以存1024个字节吗?
当我们看到java代码中的"byte[] b = new byte[1024];"时,其含义相当明确:它声明了一个byte类型的数组b,其容量预设为1024个字节。这意味着这个数组能够容纳1024个单独的字节数据,无论是字符、数字或其他基本数据类型,只要每个元素占据1字节的空间。然而,重要的是要理解,这个数组的大小是硬性的,...

byte[]字节数组的问题
byte[1]长度为1,只能放一个字节,花括号就是数组元素以逗号隔开,new byte[]{-46}就是包含一个字节的数组,这个数组的第一个元素是-46

java:IO流的操作,,byte数组的大小会影响写入速度么?
理论上讲会。每次文件读写是以簇为单位,每簇都要消耗时间,如果byte数大于一簇,肯定要多花时间。 不过现在电脑最小的簇也是4K,你的这两个对象没有差别。如果你的io流是针对网络,那么就不是簇,而是一个包的大小。有些包的载量比1K小,可能会有些差别。不过一般来说 10 和1024的差别,人是...

Java中一个byte是多少个位元组,如果byte阵列的长度是1024,是1mb的大小...
24c512一次最大写入的长度是多少个位元组 此晶片的一页(page)为8位元组,就是启动一次写操作后,可以连续写8个位元组,如果你一次性写10个,每个都重新启动写操作当然没问题。1Mb是多少个字? 1个汉字等于两个位元组 1MB=1024KB 1KB=1024Byte Byte就是B也就是位元组 所以1MB=1024KB=...

java byte的范围有限(-127~128)对于大的数就会溢出;请问如何解决?追加1...
把大的数分解为byte数组 每次发送 先 %256 再 \/256,循环...

首先定义个BYTE数组 BYTE A[100],但实际中不一定用完,我怎么能获得它的...
这样移动直到读取到第一个不为0的数据为址,通过循环我们很容易计算出指针移动了多少位, 总数是100,作个差就得到数据的长度了 为什么要让指针从后边移,因为你不保证数据中间会不会有0,比如一组数据 1230456789 如果是这样它只能计算机123的长了 但你从后边开始就不会出现这种问题。随之带来的还有...

在byte 数组里区别负数和大于0x80的数
在byte 数组里,是没有办法区别负数和大于0x80的数的。因为它们本就是一样的。即在byte 数组里,负数就一定是“大于等于”0x80的。所有“大于”0x80的数就一定是负数。[-128]补=0x80 [-1]补=0xff

相似回答