黑马程序员技术交流社区

标题: 第一个技术贴 [打印本页]

作者: 周刚    时间: 2012-7-2 10:44
标题: 第一个技术贴
本帖最后由 周刚 于 2012-7-3 21:59 编辑

看了老师的视频,while(c=fr.read()!=-1){System.out.println((char)c} 有一个疑问:上面代码是字符流读入的一种方法,一次读取一个字符。但如果正好我读到-1,会出现什么样的状况呢?
作者: 张扬123    时间: 2012-7-2 11:20

  1. <P> import java.io.*;
  2. class  FileReaderDemo
  3. {
  4. public static void main(String[] args) throws IOException
  5. {
  6.   FileReader fr = new FileReader("demo.txt");
  7.   while(true)
  8.   {
  9.    int ch =fr.read();
  10.    if (ch==-1)
  11.     break;
  12.    System.out.println("ch="+(char)ch);
  13.   }

  14.   fr.close();
  15. }</P>
  16. <P>}
  17. </P>
复制代码
我在demo.txt文件中存储了abcde-1,读取的结果是
ch=a
ch=b
ch=c
ch=d
ch=e
ch=-
ch=1
看到打印结果想必楼主就明白了。
read如果已到达流的末尾,则返回-1.但当-1作为字符出现被读取的时候,其实就是-和1.



作者: 佟都    时间: 2012-7-2 11:22
本帖最后由 tongdu_simon 于 2012-7-2 11:31 编辑

在输入流中-1是两个字符(char),所以只能分两次read()。

这里read()方法的返回值是char对应的int值,char占两个字节,取值范围为0~65535;
所以读取正常字符永远不可能返回-1。


作者: 赵庆礼    时间: 2012-7-2 11:47
将会得到-和1,因为-和1是两个字符
你可以自己测试一下
附图

作者: 杨锦    时间: 2012-7-2 15:22
-1会被当作“-”和“1”两个字符来读,只读一个字符也就是读出“-”字符,这个例子老毕的视频里有特别讲,楼主仔细看看
作者: 何旭栋    时间: 2012-7-2 18:21
张扬123 发表于 2012-7-2 11:20
我在demo.txt文件中存储了abcde-1,读取的结果是
ch=a
ch=b

理解错了把,(char)-1是存在的
作者: 何旭栋    时间: 2012-7-2 18:35
  1. import java.io.*;
  2. import java.util.*;
  3. public class demo
  4. {
  5.         public static void main(String[] agrs) throws IOException
  6.         {
  7.                 FileWriter fw = new FileWriter("1.txt");
  8.                 fw.write(65);
  9.                 fw.write(66);
  10.                 fw.write((-1));
  11.                 fw.write(67);

  12.                 fw.close();

  13.                 FileReader fr = new FileReader("1.txt");
  14.                 int i = 0;
  15.                 while((i=fr.read()) != -1)
  16.                 {
  17.                         System.out.println(i+"::"+(char)i);
  18.                 }
  19.                 fr.close();
  20.         }
  21. }
复制代码
-1写进去显示?,读取出来也是问号,不过变成63了,估计文本中不存在-1的符号
作者: 黑马-王言龙    时间: 2012-7-2 21:34
不可能出现-1的情况

在JAVA中,字符都是用Unicode统一编码,在计算机中对应的都是整数,没有负数
作者: 黑马罗坚    时间: 2012-7-2 21:43
你考虑的问题是不存在的  字符流的read读取的是该字符所代表的编码  而字符的编码是不存在-数的  如果是字节流读取的一个字节是有可能读出来-1的而返回的是一个整数 底层流如果没读取到文件末尾的话它返回的是读出来的byte & 0xff  这样的话就算读出来的是一个byte-1 二进制11111111  而返回的是-1&0xff 即0000-0000 0000-0000 0000-0000 1111-1111
所以永远不会出现你说的情况




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