Java语法-缓冲流

缓冲流在Java中用于提高文件读写效率,通过在输入/输出流中添加缓冲区来实现。主要包括字节缓冲流如BufferedInputStream和BufferedOutputStream,以及字符缓冲流如BufferedReader和BufferedWriter。在实际应用中,使用缓冲流可以减少系统调用次数,提升性能。文章详细介绍了字节缓冲输出流和输入流的使用方法,并提供了代码示例。此外,还探讨了如何利用缓冲流对文本内容按行首数字进行排序的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、缓冲流的作用是什么?

使用字节输入流读取文件的步骤是:
Java程序 → JVM → OS → 文件单个字节/单个字符 → OS → JVM → …
效率低下;
相当于快递员送快递,一次只送一个快递;
给字节输入流提供一个缓冲区,提高读取效率;
Java程序 → JVM → OS → 一个缓冲区的内容(数组的形式) → OS → JVM → …

2、缓冲流有哪几种?

(1)字节缓冲流:BufferedInputStream,BufferedOutputStream
(2)字符缓冲流:BufferedReader,BufferedWriter

3、字节缓冲输出流的代码演示

在BufferedOutputSteam 构造方法中传递 FileOutputStream对象;
使用 BufferedOutputStream 对象的方法 write, 把数据写入到缓冲区中;
使用 BufferedOutputStream 对象的方法 flush, 把缓冲区的内容刷新到文件中;
释放资源;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedOutputSteamTest {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("a.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        bos.write(97);
        bos.flush();
        bos.close();
    }
}

总结:
构造方法:传入 FileOutputStream对象;
成员方法:write(), flush(),close()

4、字节缓冲输入流的代码演示

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInputStreamTest {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("a.txt");
        BufferedInputStream bis = new BufferedInputStream(fis);
        int len = 0;
        while ((len = bis.read()) != -1){
            System.out.println(len);
        }
        bis.close();
    }
}

总结:输入流都要用到 for 循环

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInputStreamTest {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("a.txt");
        BufferedInputStream bis = new BufferedInputStream(fis);
//        int len = 0;
//        while ((len = bis.read()) != -1){
//            System.out.println(len);
//        }

        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = bis.read(bytes)) != -1){
            System.out.println(new String(bytes,0,len));
        }
        bis.close();
    }
}

总结:
用字节数组的话,read的返回值是读取的长度;
String构造方法注意一下;

5、字符缓冲输出流代码实现

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferWriterTest {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("a.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write("你好");
        bw.flush();
        bw.close();
    }
}

6、字符缓冲输入流的代码实现

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderTest {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("a.txt"));
        String line = null;
        while((line = br.readLine())!= null){
            System.out.println(line);
        }
    }
}

7、对文本内容进行排序:

3、举头望明月
4、低头思故乡
1、床前明月光
2、疑是地上霜
import java.io.*;
import java.util.HashMap;

public class Test {
    public static void main(String[] args) throws IOException {
        HashMap<String, String> map = new HashMap<>();
        BufferedReader br = new BufferedReader(new FileReader("a.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
        String line;
        while((line = br.readLine())!=null){
            // 最重要的一步,切割,返回到字符数组中
            String[] arr = line.split("、");
            map.put(arr[0],arr[1]);
        }
        for (String key : map.keySet()) {
            String value = map.get(key);
            line = key + "、" + value;
            bw.write(line);
           // bw.write("\r\n");
            bw.newLine();
        }
        br.close();
        bw.close();
    }
}

总结:
排序根据每行的首数字进行排序;
将数字放在HashMap中,会按键值对帮我们自动排序;
如何将两块内容放在HashMap中成为了重点;
用split方法,返回字符数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值