您的位置:首页 > Web前端

InputStream 、 InputStreamReader 、 BufferedReader

2015-12-15 21:55 447 查看
原文地址:http://blog.csdn.net/moxie008/article/details/5663488

                 http://blog.csdn.net/xiaoya629/article/details/5610670 

                 http://blog.csdn.net/hippoppower/article/details/4547876

.InputStream、OutputStream

处理字节流的抽象类

InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.

OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等.

2.InputStreamReader  OutputStreamWriter

处理字符流的抽象类

InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.

OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流.

3.BufferedReader BufferedWriter

BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,

从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

BufferedWriter  由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine使用平台自己的行分隔符,

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

InputStream能从來源处读取一個一個byte,

所以它是最低级的,

例:

[java] view
plaincopy

import java.io.*;    

public class Main
{    

    public static void main(String[]
args) {    

            

        try {    

            FileInputStream fis=new FileInputStream("d://desktop//test.txt");    

            int i;    

                

            try {    

                while((i=fis.read())
!= -1){    

                    System.out.println(i);    

                }    

                /*假設test.txt檔裡頭只有一個文字
"陳" ,且其編碼為 utf8 

                 * 輸出 

                 *  233 

                    153 

                    179 

                 */   

            } catch (IOException
e) {    

                // TODO Auto-generated
catch block    

                e.printStackTrace();    

            }    

                

                

        } catch (FileNotFoundException
e) {    

            // TODO Auto-generated
catch block    

            e.printStackTrace();    

        }    

                    

    }    

}  

InputStreamReader

InputStreamReader封裝了InputStream在里头,

它以较高级的方式,一次读取一个一个字符,

下例是假设有一个编码为utf8的文档,

其內容只有一个中文字 "陳"

[java] view
plaincopy

import java.io.*;     

public class Main {     

    public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {     

                     

            FileInputStream fis=new FileInputStream("d://desktop//test.txt");     

            try {     

                InputStreamReader isr=new InputStreamReader(fis,"utf8");     

                int i;     

                while((i=isr.read()) != -1){     

                    System.out.println((char)i);  //輸出  陳     

                }     

            } catch (Exception e) {     

                // TODO Auto-generated catch block     

                e.printStackTrace();     

            }                                            

                     

    }     

}    

BufferedReader

BufferedReader则是比InputStreamReader更高级,

它封裝了StreamReader类,

一次读取取一行的字符

[java] view
plaincopyprint?

import java.io.*;    

public class Main
{    

    public static void main(String[]
args) throws FileNotFoundException,
UnsupportedEncodingException {    

                    

            FileInputStream fis=new FileInputStream("d://desktop//test.txt");    

                

            try {    

                InputStreamReader isr=new InputStreamReader(fis,"utf8");                    

                BufferedReader br=new BufferedReader(isr);    

                    

                String line;    

                while((line=br.readLine())
!= null){    

                    System.out.println(line);    

                }    

            } catch (Exception
e) {    

                // TODO Auto-generated
catch block    

                e.printStackTrace();    

            }                                           

                    

    }    

}   

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

12.4  转换流--OutputStreamWriter类与InputStreamReader类

整个IO包实际上分为字节流和字符流,但是除了这两个流之外,还存在一组字节流-字符流的转换类。

OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象。

InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。

如果以文件操作为例,则内存中的字符数据需要通过OutputStreamWriter变为字节流才能保存在文件中,读取时需要将读入的字节流通过InputStreamReader变为字符流,转换步骤如图12-7所示。

 


(点击查看大图)图12-7  转换步骤
从图12-7中可以清楚地发现,不管如何操作,最终全部是以字节的形式保存在文件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android java