Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1529346
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 19:33:31

一起学习
有关BufferedReader类的一些问题,程序代码如下:

import java.io.*;
class Test {
public static void main(String arg[])throws IOException{

InputStreamReader isr = new InputStreamReader(System.in); // InputStreamReader
类的一个对象接收输入System.in
BufferedReader br = new BufferedReader(isr);//
接收输入存至缓冲区,参数是System.in
int c;
while((c = br.read()) != -1){
String s = br.readLine();
System.out.println(s);
}
}
}

该程序是为了接收一串输入然后将其打印至屏幕,出现的问题是打印出来时第一个字符不见了。

其实问题的原因很简单,程序中判断字符是否已经完全打印的语句

while((c = br.read()) != -1)

在第一次执行的时候已经读了一个字符出来,然后光标就会后移一位,接下来的循环中s=br.readLine();读到的就只是后续的字符串了,因此会少一个字符,解决的方法也不难,把判断条件改掉就是了

我做了一下小小的改动便可解决

import java.io.*;
class Test {
public static void main(String arg[])throws IOException{

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
int c;

do{

String s = br.readLine();

System.out.println(s);

}while(c = br.read()!=-1);

}

}

上面这个程序就可以完成想要的功能了。呵呵

另外,通常在BufferedReader类使用之后都会用一个flush()方法,我看有些网友也有疑问,其实BufferedReader用了一个系统级的缓冲区,只有当缓冲区满了的时候才会输出,如果没有满而又想要操作缓冲区的话,就只能用flush()方法来清空缓冲区,让结果输出,然后操作

下载本文示例代码


BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得BufferedReader类的一点心得
阅读(200) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~