字符流与字节流关于返回值int概述

https://www.aliyun.com/jiaocheng/1452562.html 

c的char分配一个字节的存储空间。也就是8位。2的八次方是256,也就是-128-127。
而java的char是两个字节的存储空间。也就是16位,2的16次方为65536,也就是0-65535

 /*
   * 如果返回char, 那么无法表示流末尾.
   * char的取值范围是从0到65535
   * 这个范围内的所有字符, 都有可能在数据中出现
   * 我们需要使用一个不可能在数据中出现的值来表示流末尾
   * 那么Java中就是用-1来表示这个末尾的, 因为-1不会在数据中出现
   * 而为了返回-1, 那么只能用int
   * 当流中读取到一个字符时, read()方法内部就会当作int返回, 如果读到流末尾, 直接返回-1
   */

 /*
   * 如果返回byte, 同样无法表示流末尾.
   * byte的取值范围是从-128到127
   * 这个范围内所有的数据, 都有可能在数据中出现
   * read()方法需要返回一个特殊的值来表示流末尾, 这个值不能和流中的数据重复
   *
   * 字符流中读取到的char是直接当作int使用, 例如读取到一个'a'也就是97的时候, 那么就相当于返回了一个int的97
   * 字节流中不能这么做, 因为如果文件中存在数据-1, 把-1直接当作int返回还是-1, 那么就无法区分这个读到的结果是流末尾还是流中的数据了
   *
   * read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数
   * 这时就可以用-1表示流末尾了
   * 而改变后的数据只要强转回byte, 就可以得到原有数据
   */

发布了52 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/YKWNDY/article/details/86571019
今日推荐