A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lmm 中级黑马   /  2014-3-23 11:09  /  1750 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lmm 于 2014-3-23 20:35 编辑

文件系统数据中, FileStream类定义的对象操作的是字节数组, 而StreamReader或StreamWirte操作的是字符数组. 字节数组和字符数组有什么区别?
求教.

4 个回复

倒序浏览
字符数组与字节数组的主要区别还是字节与字符的不同。
一个字节是8位,也就是8bit;而一个字符按照编码的不同,占用的字节数是不同的,比如用Unicode编码的就是16位,也就是占两个字节。
假如定义一个字符数组,我只存一个汉字,汉字用的是Unicode编码,可以通过System.Text.Encoding.Unicode.GetByteCount()看到占用几个字节:
  1. char[] a = {'哈'};

  2. int count = System.Text.Encoding.Unicode.GetByteCount(a);
  3. Console.WriteLine(count);
  4. Console.ReadKey();
复制代码


也可以将它的字节输出来:
  1. byte[] count = System.Text.Encoding.Unicode.GetBytes(a);
  2. for (int i = 0; i < count.Length; i++)
  3.             {
  4.                 Console.WriteLine(count[i]);
  5.             }
复制代码


所以说若是字符数组,那么它就是按照一种编码方式,一个字符一个字符的读写;若是字节数组,就是按照8位8位读写。
回复 使用道具 举报
没有什么太大的区别,就是保存元素时的类型不一致罢了,根据你要定义的元素所占的字节长度去自定义该使用字节数组还是字符数组。。。
回复 使用道具 举报
哦, 我明白了, 就是字符可以以字节形式存储, FileStream对象操作的是字节数组, 需要转换成字符数组来显示.
感谢回答.
回复 使用道具 举报
2L正解,其实你可以简单理解为FileStream类都是操作字节的,它什么类型都可以操作(需要转换),而StreamReader或StreamWirte都是字符的(一般操作文本文件)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马