Java中IO流的使用和解析

1、IO流的分类

   IO流用于设备间进行数据传输。
分类:
   A:按流向分
       输入流——读取数据
       输出流——写入数据
   B:按数据类型分
       字节流
           InputStream字节输入流——读取字节类型数据
           OutputStream字节输出流——写入字节类型数据
       字符流(方便操作文本文档)
           Reader字符输入流——读取字符类型数据
           Writer字符输出流——写入字符类型数据
   注意:当数据是文本文档时,也就是说当用系统自带记事本打开能读懂时,才使用字符流。否则,一律使用字节流,如图片、视频文件等。

2、字节流的使用

   字节流读取数据再写入数据的方式有两种(以File的操作举例):

方式一:用字节输入流读取,用字节输出流写入

   说明:这种方法效率低下,可以读取一个字节,也可以读取一个字节数组,它可以对任何形式的文件进行处理。
   FileInputStream读取数据/FileOuputStream写入数据:
   代码实现:

//创建字节输入流
FileInputStream fis = new FileInputStream("a.txt");
//创建字节输出流
FileOutStream fos = new FIleOutputStream("b.txt");

//方式1:读取一个字节
int by = 0;
//读取并判断是否读取完
while((by = fis.read()) != -1){    fis.read()返回的是数据by的值
	fos.write();
}

//方式2:读取一个字节数组
byte[] bys = new byte[1024];//一般字节数组的长度时1024或1024 的整数倍
int len = 0;
while((len = fis.read(bys)) != -1){  //fis.read(bys):返回的是字节数组bys的长度
	fos.write(bys,0,len);
	fos.fluse(); //每读一个数组刷新一次
}

//释放资源
fos.close();
fis.close();

方式二:用字节缓冲输入流读取数据,用字节缓冲输出流写数据

   说明:使用缓冲区可以大大提高效率。
   代码实现:

//创建字节缓冲输入流对象
BufferedInputStream bis = new BufferedInputStream( new FileInputStream("a.txt") );
//创建字节缓冲输出流对象
BufferedoutputStream bos = new BufferedOutputStream( new FIleOuputStream("b.txt"));

//方式1:一次读取一个字节
int by = 0;
while((by = bis.read()) != -1){
	bos.write();
}

//方式2:一次读取一个字节数组
byte[] bys = new byte[1024];
int len = 0;
while((len = bis.read(bys)) != -1){
	bos.write( bys , 0 , len);
}

   字节流数据效率比较:
   读取一个字节 < 缓冲区读取一个字节 < 读取一个数组 < 缓冲区读取一个数组

3、字符流的使用

   字符流就是:字节流 + 编码表

IO流中的编码问题:

   A:OutputStreamWriter
       OutputStreamWriter(OutputStream os):默认编码,GBK
       OutputStreamWriter(OutputStream os,String charsetName):指定编码。
    B:InputStreamReader
       InputStreamReader(InputStream is):默认编码,GBK
       InputStreamReader(InputStream is,String charsetName):指定编码
    编码问题只要解码和编码使用一致即可。

字符流

   Reader
       |–InputStreamReader 字符输入流
           |–FileReader (可以替代InputStreamReader)
        |–BufferedReader 字符缓冲输入流
   Writer
       |–OutputStreamWriter 字符输出流
           |–FileWriter (可以替代OutputStreamWriter)
       |–BufferedWriter 字符缓冲输出流

   用字符缓冲IO流实现文本文档的复制:

		//创建字符缓冲输入流对象
        BufferedReader br = new BufferedReader(new FileReader(
                "a.txt"));

        //创建字符缓冲输出流对象
        BufferedWriter bw = new BufferedWriter(new FileWriter(
                "b.txt"));

        //读取字符将字符写入目的地
        char[] chs = new char[1024];
        int len =0;
        while ((len=br.read(chs))!=-1){
            //写入b.txt
            bw.write(chs,0,len);
            bw.flush();
        }

        bw.close();
        br.close();

你可能感兴趣的:(Java基础知识)