Java 处理流

处理流:

处理流类型:

作用:增强功能、提供性能,节点流之上
1.缓冲流
输入流:BufferedInputStream(字节) BufferedReader(字符)

输出流:BufferedOutputStream(字节) BufferedWriter(字符)


2、转换流: 字节流 转为字符流   处理乱码(编码集、解码集)
1)、编码与解码概念
 编码: 字符  ---编码字符集>二进制
 解码:二进制  --解码字符集->      字符
2)、乱码:
(1)编码与解码的字符集不统一
(2)字节缺少,长度丢失
(3)文件乱码 
InputStreamReader(字节输入流,"解码集")
OutputStreamWriter(字符输出流,"编码集")

一、缓冲流

【1】对I/O进行缓冲是一种常见的性能优化,缓冲流为I/O流增加了内存缓冲区,增加缓冲区的两个目的: 
(1)允许Java的I/O一次不只操作一个字符,这样提高䇖整个系统的性能; 
(2)由于有缓冲区,使得在流上执行skip、mark和reset方法都成为可能。

【2】缓冲流:它是要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能, 
提高了读写的效率,同时增加了一些新的方法。例如:BufferedReader中的readLine方法, 
BufferedWriter中的newLine方法。

1.字节缓冲流

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * 字节流文件拷贝+缓冲流 ,提高性能
 * 缓冲流(节点流)
 * @author Administrator
 *
 */
public class BufferedByteDemo {
  
       /**
        * @param args
        */
       public static void main(String[] args) {
              
       }
       /**
        * 文件的拷贝
        * @param  源文件路径
        * @param  目录文件路径
        * @throws FileNotFoundException,IOException
        * @return 
        */
              public static void copyFile(String srcPath,String destPath)
               throws FileNotFoundException,IOException {
                     //1、建立联系 源(存在且为文件) +目的地(文件可以不存在)  
                     File src =new File(srcPath);
                     File dest =new File(destPath);
                     if(! src.isFile()){ //不是文件或者为null
                            System.out.println("只能拷贝文件");
                            throw new IOException("只能拷贝文件");
                     }
                     //2、选择流
                    //格式如下:
                     InputStream is =new BufferedInputStream(new 
                     FileInputStream(src));
                     OutputStream os =new BufferedOutputStream( 
                     new FileOutputStream(dest));
                     //3、文件拷贝   循环+读取+写出
                     byte[] flush =new byte[1024];
                     int len =0;
                     //读取
                     while(-1!=(len=is.read(flush))){
                            //写出
                            os.write(flush, 0, len);
                     }
                     os.flush(); //强制刷出
                     
                     //关闭流
                     os.close();
                     is.close();
              }
  
}

小结:

用法就是将FileInputStream和FileOutputStream给包装起来

 

2.字符缓冲流

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
 * 字符缓冲流 +新增方法(不能发生多态)
 * @author Administrator
 *
 */
public class BufferedCharDemo {
 
       /**
        * @param args
        */
       public static void main(String[] args) {
              //创建源 仅限于 字符的纯文本
              File src =new File("E:/xp/test/Demo03.java");
              File dest =new File("e:/xp/test/char.txt");
              //选择流
              BufferedReader reader =null;           
              BufferedWriter wr =null;
              try {
                     reader =new BufferedReader(new FileReader(src));
                     wr =new BufferedWriter(new FileWriter(dest));
                     //读取操作
                     /*
                     char[] flush =new char[1024];
                     int len =0;
                     while(-1!=(len=reader.read(flush))){
                            wr.write(flush, 0, len);
                     }*/
                     //新增方法的操作
                     String line =null;
                     while(null!=(line=reader.readLine())){
                            wr.write(line);
                     //wr.append("\r\n");
                            wr.newLine(); //换行符号
                     }
                     wr.flush();//强制刷出
              } catch (FileNotFoundException e) {
                     e.printStackTrace();
                     System.out.println("源文件不存在");
              } catch (IOException e) {
                     e.printStackTrace();
                     System.out.println("文件读取失败");
              }finally{
                     try {
                            if (null != wr) {
                                   wr.close();
                            }
                     } catch (Exception e2) {
                     }
                     try {
                            if (null != reader) {
                                   reader.close();
                            }
                     } catch (Exception e2) {
                     }
              }
       }
 
}

小结:

用法与字节缓冲流基本一致,新增.readLine(),.newLine()方法

 

 

二、转换流

  • 转换流有两种: 
    (1)InputStreamReader:将字节流转换为字符流; 
    (2)OutputStreamWriter:将字符流转换为字节流。

 输出流:

public OutputStreamWriter(OutputStream out, String charsetName)

输入流:

public InputStreamReader(InputStream in, String charsetName)

他们分别传递的参数是OutputStream和InputStream,以及他们的子类(多态)

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
  
/**
 * 转换流: 字节转为字符
 * 1、输出流 OutputStreamWriter 编码
 * 2、输入流 InputStreamReader  解码
 * 
 * 确保源不能为乱码
 * @author Administrator
 *
 */
public class ConverDemo02 {
  
       /**
        * @param args
        * @throws IOException 
        */
       public static void main(String[] args) throws IOException {
              //指定解码字符集
              BufferedReader br =new BufferedReader(
                            new InputStreamReader(
                                   new 
                                   BufferedInputStream(
                                                 
                                  new FileInputStream( 
                                                               new File("E:/xp/test/Demo03.java"))),"UTF-8")
                            );
              //写出文件 编码
              BufferedWriter bw =new BufferedWriter(
                            new OutputStreamWriter(
                                   new BufferedOutputStream(     
                                   new FileOutputStream(new 
                                   File("E:/xp/test/encode.java"
                                   )))));
                            
              String info =null;
              while(null!=(info=br.readLine())){
                     //System.out.println(info);
                     bw.write(info);
                     bw.newLine();
              }
              bw.flush();
              bw.close();
              br.close();
       }
  
}

 

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值