2 liuhuabing760596103 liuhuabing760596103 于 2014.12.19 22:39 提问

java中关于自己建的一个缓冲流中的问题

1 import java.io.*;
2 //创建的这个类其实还是调用的FileReader的read方法,所以它会抛出IOException;
3 class MyBufferedReader{
4 //属性(要想使用这个缓冲流就得先创建一个这个文件流,得把它弄成属性作为一个参数);
5 private FileReader fr;
6 public MyBufferedReader(FileReader fr){
7 this.fr=fr;
8 }//构造方法
9 public String myReadLine()throws Exception{
10 //创建一个容器,来储存所读取的每个字符;
11 StringBuilder sb=new StringBuilder();
12 //通过read方法将读到的数据一一放入到容器里
13 int i=0;
14 while((i=fr.read())!=-1){
15 if(i=='\r') continue;
16 如果遇到换行符,才返回的话;那么最后一行是不会返回的,虽已读取到但没返 回
17 if(i=='\n') return sb.toString();
18 else sb.append((char)i);//放入容器
19 }
20

21 //修补方法:
22 if(sb.length()!=0){return sb.toString();
23 }
24 return null;//注意要有返回值
25 }
26 }
27 class MyBuffered{
28 public static void main(String[] args)throws Exception{
29 FileReader fr=new FileReader("china.txt");
30 MyBufferedReader mfr=new MyBufferedReader(fr);
31 String s=null;
32 while(s=mfr.myReadLine())!=null){
33 System.out.println(s);
34 }
35 fr.close();
36 }
37 }

我想确定一下这个代码里面的15行与17行是不是可以去掉啊?去掉有什么影响啊?我试了试是一样的,求前辈们解答!!
还有就是22行中的为什么不能将其改为:
if(sb.toString()!=0){return sb.toString();
}


2个回答

bdmh
bdmh   Ds   Rxr 2014.12.20 15:47
已采纳

FileReader是一个一个字节读取,判断换行符,是需要的,当有没有在一些情况下显示的结果可能一样,有些显示会忽略这些字符,如果你要对字节分析的话,就不要去掉
22行,不要改,因为如果sb中有特殊字符,你这样判断就会有问题

liuhuabing760596103
liuhuabing760596103 谢谢您的回答
大约 3 年之前 回复
liuhuabing760596103
liuhuabing760596103 今天看视频时突然想起来了,你的第一个回答很有道理,赞同;第二个应该是要是用字符串判断的话就会无限循环;
大约 3 年之前 回复
lzp_lrp
lzp_lrp   Ds   Rxr 2014.12.19 23:30

建议不要去掉15和17行,这是用来处理换行回车的代码,如果去掉,当有换行回车时,程序会运行不正常。

第22行不能改为if(sb.toString()!=0){return sb.toString();
判断length比较常用,一般都是这么用的

liuhuabing760596103
liuhuabing760596103 还是谢谢您的热心回答
大约 3 年之前 回复
liuhuabing760596103
liuhuabing760596103 去掉的话,我试了试还是可以的,应该加上会比较严谨吧;那个如果要是判断sb.toString()!=null的话它会进入无线循环,
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!