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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李万海 中级黑马   /  2013-3-26 20:33  /  1515 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李万海 于 2013-3-26 21:53 编辑
  1. while(true)
  2. {
  3.     BufferedReader bfr= new BufferedReader(new InputStreamReader(System.io));
  4.                         String strLine = bfr.readLine();
  5.     if(strLine != null)
  6.     {
  7.                System.out.println("hi:" + strLine );
  8.     }
  9.     else
  10.     {
  11.                 return;
  12.     }
  13.    bfr.close();
  14. }
复制代码
为什么在这过程中会出现数据丢失的情况?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

5 个回复

倒序浏览
  1. import java.io.*;

  2. class Test121 {
  3.         public static void main(String[] args) {
  4.                 BufferedReader bfr = null;
  5.                 try {
  6.                         while (true) {
  7.                                 bfr = new BufferedReader(new InputStreamReader(System.in));  //此处输入不应改为System.io
  8.                                 String strLine = bfr.readLine();
  9.                                 if (strLine != null) {
  10.                                         System.out.println("hi:" + strLine);
  11.                                 } else {
  12.                                         return;
  13.                                 }
  14.                         }
  15.                 }
  16.                 catch (IOException e) {
  17.                         System.out.println(e.toString());
  18.                 }
  19.                 finally {
  20.                         try {
  21.                                 bfr.close();
  22.                         } catch (IOException e) {
  23.                                 System.out.println("关闭异常");
  24.                         }
  25.                 }

  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
每次循环都创建一个新的BufferedReader对象是不正确的,应该把第3行代码放到while循环前,再把关闭流的第13行代码放到循环后。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
FileReader读取文件的过程中,FileReader继承了InputStreamReader,但并没有实现父类中带字符集参数的构造函数,所以FileReader只能按系统默认的字符集来解码,然后在UTF-8 -> GBK -> UTF-8的过程中编码出现损失,造成数据丢失.

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 恭喜25分。。

查看全部评分

回复 使用道具 举报
使用BufferedReader要注意2点
1.一定要导包java.io.*;
2.一定要抛出异常,所谓异常就是可以预测的错误
你的问题很明显,没有抛异常

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,继续追问; 没有的话,尽量及时将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马