黑马程序员技术交流社区

标题: IO流的一点疑问 [打印本页]

作者: 吴刚    时间: 2012-9-17 14:19
标题: IO流的一点疑问
本帖最后由 吴刚 于 2012-9-17 14:23 编辑
  1. import java.io.*;

  2. public class TestReader
  3. {
  4.         public static void main(String args[])
  5.         {
  6.                 FileReader fr = new FileReader("大家自己写路径");
  7.                 int ch = fr.read();
  8.                 while(-1 != ch)
  9.                 {
  10.                         System.out.printf("%c", ch);
  11.                         ch = fr.read();
  12.                 }
  13.                
  14.                 fr.close();
  15.         }
  16. }
复制代码
想请问一下代码中的read方法的返回值是int类型的数据,还有就是返回的int数据是字符串的unicode编码还是1,0,1,0的二进制数据?字符读取是一个字符字符读取的,那么返回的是字符的整数表示形式吗?如果是的话,那字符是两个字节,为什么不用short。。。


作者: 赵永康    时间: 2012-9-17 15:24
read()方法,所读取的是单个字符, 当返回值是-1的时候,表示此时流已经读到末尾,没有可读了的!返回值是int 本人理解可能是自动提升了吧??同样求解...
作者: 程金    时间: 2012-9-17 17:00
本帖最后由 程金 于 2012-9-17 17:05 编辑

想请问一下代码中的read方法的返回值是int类型的数据,还有就是返回的int数据是字符串的unicode编码还是1,0,1,0的二进制数据?字符读取是一个字符字符读取的,那么返回的是字符的整数表示形式吗?如果是的话,那字符是两个字节,为什么不用short。。。
________________
unicode编码在计算机中还是一个二进制数据,表示任何东西在计算机中都是二进制数据
字符流的read()方法返回单个字符,也就是表示这个字符的unicode编码值的二进制数据;字节流的read的方法返回的是一个字节, 然后被转换成一个int数据,为了是能用-1来表示流末尾
char的取值范围是从0到65535,这个范围内的所有字符, 都有可能在数据中出现,short也是两个字节显然没有多余的数来表示流末尾, 而且有符号的short数取值是-32,768到32,767 无法表示char的unicode编码,我们需要使用一个不可能在数据中出现的值来表示流末尾
   那么Java中就是用-1来表示这个末尾的, 因为-1不会在数据中 出现而为了返回-1, 那么只能用int
当流中读取到一个字符时, read()方法内部就会当作int返回, 如果读到流末尾, 直接返回-1

read()方法内部将读取到的所有字节高位补0转为int返回, 这样做所有的数据都会是正数
  这时就可以用-1表示流末尾了
  而改变后的数据只要强转回byte, 就可以得到原有数据
作者: 李健_8    时间: 2012-9-17 17:37
java中默认的返回值类型是 int   int的范围比short要大  其实用short也是可以的  只要不超出范围  
就像你用给你两个盒子  一个中等盒子  一个小盒子 你都可以用  不过默认是中等盒子 用想小盒子的话  需要实现打个招呼

360截图20120917172752718.jpg (56.73 KB, 下载次数: 37)

360截图20120917172752718.jpg

作者: 吴刚    时间: 2012-9-17 22:46
谢谢楼上的几位朋友、、、




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