Buffered-char --缓冲流的学习

本文介绍了一个使用Java实现的文件复制示例,通过BufferedReader和BufferedWriter类进行文本文件的读取与写入操作,展示了如何利用readLine()方法逐行读取文件并将其写入到另一个文件中。
    package cn.hjm.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.io.Writer;

/**
 * 文本类型缓冲流操作,因为有自己的方法  使用新增方法不能使用多        态,也就是父类不能使用基类,父类要用自己的类
 * 就不要造车了
 * 独特的方法
 *    readLine();
   *    writer(String strLine);
 * @author hjm
 *
 */
  public class BufferedCharCopyFile02 {

  public static void main(String[] args) throws IOException{

  //1.建立联系 源头文件(真实存在并且是文件不能是文件夹)和目的文件
File file = new File("C:\\Users\\hjm\\Desktop\\a.txt");
//2.目标文件
File dest = new File("C:\\Users\\hjm\\Desktop\\b.txt");

//3.选择流,输入和输出流。要将基类换成子类
BufferedReader reader =   new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(dest));

        //4.准备车子
        //  char[] b = new char[1024];
        //  int len=0; //假装车上没人

        //开始上车
try {
        //      while(-1!=(len=reader.read(b))){ //当车子没有满的话继续上车,车子一边开就一边有人下车
        //          writer.write(b, 0, len); //从0开始慢慢把人放下车去,有多少人放多少人
        //      }
    String line =null;
    while(null!=(line=reader.readLine()))//如果父类使用基类,那么自类就调用不到自己独特的方法
    {
     writer.write(line);
     writer.write("\r\n");
    }
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}finally{
    writer.flush();//还有不想下车的赶紧催下车
    reader.close();//本趟车前面要关闭了
    writer.close();//本趟车后门要准备关闭了
}

}
}
### 流的介绍 在 Java 中,流是用于在数据源(如文件、网络连接、内存等)和程序之间传输数据的抽象概念。四种基本流包括 InputStream、OutputStream、Reader 和 Writer,它们又分别有更具体的子类,分为文件流、缓冲流、数据流、转换流、Print 流、Object 流等,都分别有特定的功能或用来操作特定的数据 [^2]。InputStream 抽象类实现了 Closeable 接口,Closeable 接口上面还有一个 AutoCloseable 接口;OutputStream 抽象类实现了 Closeable 接口和 Flushable 接口;Reader 抽象类实现了 Closeable 接口和 Readable 接口;Writer 抽象类实现了 Appendable 接口、Flushable 接口和 Closeable 接口 [^4]。 ### 缓冲流的介绍 缓冲流是对基本流的一种包装,通过设置缓冲流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。例如,BufferedOutputStream 实现缓冲输出流,BufferedInputStream 创建时会创建一个内部缓冲区数组,当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节 [^1]。 ### 流和缓冲流的使用方法 以下是使用文件流和缓冲流进行文件读写的示例代码: ```java import java.io.*; public class StreamExample { public static void main(String[] args) { try { // 使用文件流写入文件 FileOutputStream fos = new FileOutputStream("test.txt"); fos.write("Hello, World!".getBytes()); fos.close(); // 使用文件流读取文件 FileInputStream fis = new FileInputStream("test.txt"); int data; while ((data = fis.read()) != -1) { System.out.print((char) data); } fis.close(); // 使用缓冲流写入文件 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test2.txt")); bos.write("Hello, Buffered World!".getBytes()); bos.close(); // 使用缓冲流读取文件 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test2.txt")); int bufferedData; while ((bufferedData = bis.read()) != -1) { System.out.print((char) bufferedData); } bis.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` ### 流和缓冲流的原理 可以用去水房打水的例子来理解流和缓冲流的原理。用节点流打水相当于每次取一滴水,需要进行多次才能完成,大部分的时间都浪费到路上了;用缓冲区相当于拿了一个小容器,每次可以取多滴水,效率明显提高了;而用高级流相当于拿了一个容量更大的容器取水,是效率最高的方式 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值