Character 流与byte流 具体有什么区别?

解决方案 »

  1.   

    参考:http://tmrp.iteye.com/blog/456457
      

  2.   

    表面上看是字符和字节的区别,Java 中字符是需要字符集编码起作用的,如果没有指定字体集,Java 会用当前操作系统的设置相关的默认的字符集。比如,我们用 FileReader 时需要指定一个字符集,如果给错了字符集那得到的字符串就是乱码,而 FileInputStream 是字节流就不需要字符集因为这是保持原始的数据面貌。一般来说,如果我们是在把数据传输并应该保持数据本身无变化的话,我们就用 Stream,而当我们是在按某个字符集处理字符时我们就用 Reader 并指定正确的字符集。比如,我们用类似搜索引擎的程序把网上的网页下载保存到磁盘上留着下一步来分析,这个过程是应该保持网页文件本身的数据;到了第二步我们开始分析的时候需要按关键字来编录索引,这个时候取词汇的过程应该是按正确的字符集来处理字符的,那么我们就分二步,第一步用 Stream 来读取 <HEAD /> 部分把 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 这一行找出来,因为这些部分肯定是 ASCII 的,用字节流处理就行了,得到正确的字体集之后,我们就该用 Reader 来读取真实的内容了并把里面的汉字或英文词汇编录到索引中,这时字符集就不能搞错。