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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© b277967086 中级黑马   /  2015-4-19 18:39  /  917 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

几种IO流的区别:

字节流(可以传File和String类)
    FileInputStream
    FileOutputStream
字符转换流(实现字节流到字符流的转换,只能传字节流)
    InputStreamReader
    OutputStreamWriter
字符流(可以传字节流和String类)
        FileReader
        FlieWriter
字符流涉及到编码的问题

    字符流=字节流+编码(GBK2312等)



字符串中的编码问题
            编码
                String -- byte[]
            解码
                byte[] -- String

IO流中的编码问题
        A:OutputStreamWriter
            OutputStreamWriter(OutputStream os):默认编码,GBK
            OutputStreamWriter(OutputStream os,String charsetName):指定编码。


1:字符流(掌握)
    (1)字节流操作中文数据不是特别的方便,所以就出现了转换流。
       转换流的作用就是把字节流转换字符流来使用。
    (2)转换流其实是一个字符流
        字符流 = 字节流 + 编码表
    (3)编码表
        A:就是由字符和对应的数值组成的一张表
        B:常见的编码表
            ASCII
            ISO-8859-1
            GB2312
            GBK
            GB18030
            UTF-8
        C:字符串中的编码问题
            编码
                String -- byte[]
            解码
                byte[] -- String
    (4)IO流中的编码问题
        A:OutputStreamWriter
            OutputStreamWriter(OutputStream os):默认编码,GBK
            OutputStreamWriter(OutputStream os,String charsetName):指定编码。
        B:InputStreamReader
            InputStreamReader(InputStream is):默认编码,GBK
            InputStreamReader(InputStream is,String charsetName):指定编码
        C:编码问题其实很简单
            编码只要一致即可
    (5)字符流
        Reader
            |--InputStreamReader
                |--FileReader
            |--BufferedReader
        Writer
            |--OutputStreamWriter
                |--FileWriter
            |--BufferedWriter


2:IO流小结
    IO流
        |--字节流
            |--字节输入流
                InputStream
                    int read():一次读取一个字节
                    int read(byte[] bys):一次读取一个字节数组
               
                    |--FileInputStream
                    |--BufferedInputStream
            |--字节输出流
                OutputStream
                    void write(int by):一次写一个字节
                    void write(byte[] bys,int index,int len):一次写一个字节数组的一部分
                    
                    |--FileOutputStream
                    |--BufferedOutputStream
        |--字符流
            |--字符输入流
                Reader
                    int read():一次读取一个字符
                    int read(char[] chs):一次读取一个字符数组
                    
                    |--InputStreamReader
                        |--FileReader
                    |--BufferedReader
                        String readLine():一次读取一个字符串
            |--字符输出流
                Writer
                    void write(int ch):一次写一个字符
                    void write(char[] chs,int index,int len):一次写一个字符数组的一部分
                    
                    |--OutputStreamWriter
                        |--FileWriter
                    |--BufferedWriter
                        void newLine():写一个换行符
                        
                        void write(String line):一次写一个字符串


flush():刷新流对象的缓存区,不然该对象的Write()方法数据还没写进去
close():也有刷新的作用,有区别。flush()以后该流对象还能使用,而close()就不能。

其实字节流到字符流中间有一个转换流InputStreamWriter

BufferReader/BufferWriter是字符缓存流,提供了缓存池,就不用一次一次的读写,提高效率。虽然都是提高效率,但是和
char[] chs=new char[1024];
int len=0;
while(len=br.read(chs)!=-1){
    bw.write(chs,0,len)
}
这种方式的思路不同,但是效果是都能提高效率。这种方式是read和write方法提供的输入输出方式。

4 个回复

倒序浏览
哎呦  多多指教
回复 使用道具 举报
学习,学习
回复 使用道具 举报
正学到这里呢
回复 使用道具 举报
谢谢,分享了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马