import java.io.*;public class BufferedReaderDemo
{
BufferedReader br;
InputStream fis;
File f;
String str;
int n;
long len;
byte[] tempB = new byte[200];

public BufferedReaderDemo() throws Exception
{
f = new File("bufferedreadtest.txt");
f.createNewFile();
len = f.length();

fis = new FileInputStream(f);
n = fis.available();
System.out.println("文件的长度为len=" + len + ",输入流能读入的字节数n=" + n);

br = new BufferedReader(new InputStreamReader(fis));

System.out.println("请输入一行字符:");
str = br.readLine();
System.out.println("从文件中读到的一行内容为:" + str);
System.out.println("br.read()的输出");
for(int i = 0; i < len; i++)
System.out.print(br.read() + " ");

System.out.println("\n下面是fis.read()的测试结果:");
for(int i = 0; i < n; i++)
{
System.out.print(fis.read() + " ");
if(i < 200)
fis.read(tempB);
}

System.out.println("tempB:" + tempB);
System.out.println("new String(tempB)" + new String(tempB));
fis.close();
br.close();
}

public static void main(String[] args) throws Exception
{
new BufferedReaderDemo();
}
}
bufferedreadtest.txt的内容为:关于流这一块终于取得了一点突破,小总结一下:
    流分为Reader、Write和InputStream、OutputStream,前者为字符输入输出流,后者为字节输入输出流,因此,前者可以从终端输入,而后者必须建立源(比如建立File对象作为FileInputStream的源),字节输入输出流是不能从读取终端的输入的,而InputStreamReader是一座由字节输入变为字符输入的一座桥梁,因此要想把从终端输入的字符转为字节流写入到输出流的源,就要用到这座桥梁,通常是这样构造对象:
输出的结果为:
br.read()的输出
32 32 32 32 27969 20998 20026 82 101 97 100 101 114 12289 87 114 105 116 101 216
44 73 110 112 117 116 83 116 114 101 97 109 12289 79 117 116 112 117 116 83 116
114 101 97 109 65292 21069 32773 20026 23383 31526 36755 20837 36755 20986 27969
 65292 21518 32773 20026 23383 33410 36755 20837 36755 20986 27969 65292 22240 2
7492 65292 21069 32773 21487 20197 20174 32456 31471 36755 20837 65292 32780 215
18 32773 24517 39035 24314 31435 28304 40 27604 22914 24314 31435 70 105 108 101
 23545 35937 20316 20026 70 105 108 101 73 110 112 117 116 83 116 114 101 97 109
 30340 28304 41 65292 23383 33410 36755 20837 36755 20986 27969 26159 19981 3302
1 20174 35835 21462 32456 31471 30340 36755 20837 30340 65292 32780 73 110 112 1
17 116 83 116 114 101 97 109 82 101 97 100 101 114 26159 19968 24231 30001 23383
 33410 36755 20837 21464 20026 23383 31526 36755 20837 30340 19968 24231 26725 2
6753 65292 22240 27492 35201 24819 25226 20174 32456 31471 36755 20837 30340 233
83 31526 36716 20026 23383 33410 27969 20889 20837 21040 36755 20986 27969 30340
 28304 65292 23601 35201 29992 21040 36825 24231 26725 26753 65292 36890 24120 2
6159 36825 26679 26500 36896 23545 35937 65306 13 10 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
下面是fis.read()的测试结果:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -
1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 tempB:[B@35ce36
new String(tempB)
或者哪位大侠可以自己亲自运行,怎么会输出这样的结果,我写本程序的目的是为了测试BufferedReader 的read方法和FileInputStream中read方法的不同,请帮我解释一下好吗,谢谢了!

解决方案 »

  1.   

    BufferedReader 的read读取一个字符
    FileInputStream中read读取一个字节
      

  2.   

    fis = new FileInputStream(f);
    br = new BufferedReader(new InputStreamReader(fis));br.read()读的就是fis流里的内容,只不过br带缓冲for(int i = 0; i < n; i++)
    {
             System.out.print(fis.read() + " ");
    if(i < 200)
    fis.read(tempB);
    }fis流的内容已经读完了,你现在再读它输出的-1表示已经是结尾了
      

  3.   

    你写的程序太烦琐了,看的很累.我给你程序你自己看吧,很好理解.
    import java.io.*;
    public class ReadFile{

    public static void main(String[] args){
    try{
    BufferedReader br=new BufferedReader(new FileReader("e:/bufferedreadtest.txt"));
    String s;
    while((s=br.readLine())!=null)
    {
    System.out.println(s);

    }
    br.close();
    }catch(FileNotFoundException e1){
    System.err.print("File not found!");
    }catch(IOException e2){
    System.out.print(e2);
    }
    }
    }上面是读文件,下面是写入文件.
    import java.io.*;
    public class WriteFile{
    public static void main(String[] args){
    File file=new File("e:/aa.txt");
    try{
    BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

    PrintWriter out=new PrintWriter(file);
    String s=in.readLine();
    while(!s.equals(""))
    {
    out.println(s);
    s=in.readLine();
    }
    in.close();
    out.close();
    }catch(IOException e){
    System.out.println(e);
    }
    }
    }