黑马程序员技术交流社区

标题: FileReader中的read()方法,为何返回值是int型? [打印本页]

作者: 黎志文    时间: 2013-6-20 02:15
标题: FileReader中的read()方法,为何返回值是int型?
本帖最后由 Super_Class 于 2013-6-20 23:53 编辑

  1. <P>import java.io.*;
  2. import java.util.*;

  3. class Demo
  4. {
  5.       public static void main(String[] args) throws IOException
  6.       {

  7.             OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("111.txt"),"GBK");
  8.             InputStreamReader isr = new InputStreamReader(new FileInputStream("111.txt"),"GBK");
  9.             osw.write("你好");
  10.             osw.flush();
  11.            
  12.             System.out.println(isr.read()); //打印结果是20320

  13.             osw.close();
  14.              isr.close();
  15.         }
  16. }</P>
  17. <P>我很疑惑一点:isr.read()方法是怎样将字符 "你" 字转成int型数据的,"你"字分两个字节,第一个字节是11000100( -60 ), 第二个字节是11100011(-29),这俩字节放一块就是11000100 11100011,这个二进制位提升成int型:00000000 0000000 11000100 11100011 转成十进制也应该是50403,为何打印出来的结果却是20320,这是怎么得来的???  

  18. </P>
复制代码

作者: 姚志远    时间: 2013-6-20 03:17
原因是你那里指定了GBK编码而各自编码顺序不同所以结果就不同了
作者: 黎志文    时间: 2013-6-20 11:18
姚志远 发表于 2013-6-20 03:17
原因是你那里指定了GBK编码而各自编码顺序不同所以结果就不同了

不是很懂,能否请稍微说的详细一些?
作者: 张承富    时间: 2013-6-20 11:40
FileReder 和 FileInputStream 分别是以字符和字节的形式来完成数据的读取的,然而返回值确是 int 类型的数据,这样做的核心目的只是要取到到一个 int 类型下的 -1 来表示数据流的末尾。


作者: 黎志文    时间: 2013-6-20 12:27
张承富 发表于 2013-6-20 11:40
FileReder 和 FileInputStream 分别是以字符和字节的形式来完成数据的读取的,然而返回值确是 int 类型的数 ...

好吧,我知道返回值为int型的目的,是为了避免出现的-1不是我们想要的。
我只是疑惑,为何打印出来的结果是 20320,而不是50403 ...
作者: 万琪    时间: 2013-6-20 13:30


API里面讲的很清楚啊!!!楼主不细心啊

作者: 杨政    时间: 2013-6-20 13:56
20320貌似是“你”所对应的Unicode码十进制值{:soso_e132:},为什么会这样?
作者: 黎志文    时间: 2013-6-20 14:24
万琪 发表于 2013-6-20 13:30
API里面讲的很清楚啊!!!楼主不细心啊

你明白了我想表达的意思了吗?你肯定没有认真看完帖子,我的意思不是说为何会返回一个int值,我明白返回值为什么会是int型,只是觉得,返回值不应是20320,而应该是50403,我算出来的,应该是50403!
好吧,可能我这帖子名字起得有点问题...
作者: jiangshicun007    时间: 2015-11-30 22:02
黎志文 发表于 2013-6-20 14:24
你明白了我想表达的意思了吗?你肯定没有认真看完帖子,我的意思不是说为何会返回一个int值,我明白返回 ...

楼主他是一次只读一个的啊!
作者: 逍遥林枫    时间: 2016-5-23 23:10
还是不懂{:2_43:}




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