A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周刚 中级黑马   /  2012-7-2 10:44  /  2310 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周刚 于 2012-7-3 21:59 编辑

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

8 个回复

倒序浏览

  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.


评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 tongdu_simon 于 2012-7-2 11:31 编辑

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

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

回复 使用道具 举报
将会得到-和1,因为-和1是两个字符
你可以自己测试一下
附图
回复 使用道具 举报
-1会被当作“-”和“1”两个字符来读,只读一个字符也就是读出“-”字符,这个例子老毕的视频里有特别讲,楼主仔细看看
回复 使用道具 举报
张扬123 发表于 2012-7-2 11:20
我在demo.txt文件中存储了abcde-1,读取的结果是
ch=a
ch=b

理解错了把,(char)-1是存在的
回复 使用道具 举报
  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的符号
回复 使用道具 举报
不可能出现-1的情况

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

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马