黑马程序员技术交流社区

标题: JavaIO中每次读一个字节,为什么会输出完整的字符? [打印本页]

作者: nyk    时间: 2014-10-30 18:21
标题: JavaIO中每次读一个字节,为什么会输出完整的字符?
本帖最后由 nyk 于 2014-10-31 23:15 编辑

以下是一个按字节读入的方法,文件demo.txt的文本是“abcdef”
  1. public static void readFile() throws IOException {
  2.                 FileInputStream fis = new FileInputStream("demo.txt");
  3.                 int ch = 0;
  4.                 ch = fis.read();
  5.                 System.out.println((char)ch);
  6.                 ch = fis.read();
  7.                 System.out.println((char)ch);
  8.                 fis.close();
  9.         }
复制代码
这方法是按字节读取数据的,为什么连读两个字节,却返回两个完整的字符,Java中不是用两个字节来表示一个字符吗?求解

作者: 小鸡捉你    时间: 2014-10-30 20:15
因为Java的Unicode是兼容ascii值的,abcd等等是属于ascii值的,ascii值占低四位,高四位以0补充,你读出来的字节已经完全的ascii的值了,然后强转,高四位补零,这样打印出来的就是正常的字符
作者: nyk    时间: 2014-10-31 23:14
小鸡捉你 发表于 2014-10-30 20:15
因为Java的Unicode是兼容ascii值的,abcd等等是属于ascii值的,ascii值占低四位,高四位以0补充,你读出来 ...

有道理!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2