java缓冲流

news2024/9/9 8:15:17

缓冲流

  • 缓冲流:
    • 字节缓冲流:
    • 字符缓冲流:
      • BufferedWriter:
      • BufferedReader:
    • 案例:

缓冲流:

缓冲流:对原始流进行包装,以提高原始流读写数据的性能。

 

字节缓冲流:

内存读写很快,文件读写很慢减少读取磁盘的次数

字节缓冲流:提高字节流读写数据的性能(读取磁盘的次数变少)。

原理:字节缓冲输入流自带了8KB缓冲池;字节缓冲输出流也自带了8KB缓冲池

 

构造器说明
public BufferedInputStream(InputStream is)把低级的字节输入流包装成一个高级的缓冲字节输入流,从而提高读数据的性能
public BufferedOutputStream(OutputStream os)把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能

 

package com.itheima.demo00_3字节缓冲流;

import java.io.*;

public class Demo10 {
    public static void main(String[] args) throws IOException {
        // 创建字节缓冲输入流:
        // BufferedInputStream(InputStream in): 对参数的流进行包装加强, 内部自带8192大小的数组, 真正操作文件靠参数的流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("day10\\abc\\3.txt"));



        // 创建字节缓冲输出流:
        // BufferedOutputStream(OutputStream out): 对参数的流进行包装加强, 内部自带8192大小的数组, 真正操作文件靠参数的流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("day10\\abc\\333.txt"));



        // 读写数据
        int len=-1;

        while((len=bis.read())!=-1){
            bos.write(len);
        }



        //关闭资源
        bos.close();
        bis.close();
    }
}

 
 

 

字符缓冲流:

BufferedWriter:

BufferedWriter:字符缓冲输出流。

作用:自带8K的字符缓冲池,可以提高字符输出流写字符数据的性能。

 

构造器说明
public BufferedWriter(Writer r)把低级的字符输出流包装成一个高级的缓冲字符输出流管道,从而提高字符输出流写数据的性能

 

方法说明
public void newLine()换行

 

 

BufferedReader:

BufferedReader:字符缓冲输入流。

作用:自带8K(8192)的字符缓冲池,可以提高字符输入流读取字符数据的性能。

 

构造器说明
public BufferedReader(Reader r)把低级的字符输入流包装成字符缓冲输入流管道,从而提高字符输入流读字符数据的性能
方法说明
public String readLine()读取一行数据返回,如果没有数据可读了,会返回null

 

package com.itheima.demo01字符缓冲流;

import java.io.*;

public class Demo01 {
    public static void main(String[] args) throws IOException {
        test01();
        test02();
    }

    public static void test02() throws IOException {
        // 字符缓冲输入流, 新增的方法: String readLine(); 读取一行,没有数据返回null;
        //      BufferedReader(Reader in): 真正操作文件靠参数传入的流, BufferedReader提供8192大小的缓冲数组
        // 读取文件:day10-io\abc\1.txt
        BufferedReader br=new BufferedReader(new FileReader("day10\\abc\\1.txt"));
        // 循环读取每一行数据
        String row=null;

        while((row=br.readLine())!=null){
            System.out.println(row);
        }

        // 关闭资源
        br.close();

    }

    public static void test01() throws IOException {
        // 字符缓冲输出流, 新增的方法: void newLine(); 换行
        // BufferedWriter(Writer out): 真正操作文件靠参数传入的流, BufferedWriter提供8192大小的缓冲数组
        // 输出文件:day10-io\abc\1.txt
        BufferedWriter bw=new BufferedWriter(new FileWriter("day10\\abc\\1.txt"));


        // 输出第一行数据
        bw.write("红烧茄子");

        // 换行
        bw.newLine();

        // 输出第二行数据
        bw.write("蒜香牛肉");

        // 换行
        bw.newLine();

        // 输出第三行数据
        bw.write("咸蛋黄茄子");

        // 换行
        bw.newLine();

        //关闭资源
        bw.close();

    }
}

 
 

案例:

拷贝出师表到另一个文件,恢复顺序(进行安装编号排序)

package com.itheima.demo01字符缓冲流;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test02 {
    public static void main(String[] args) {
        // 1.定义一个缓冲字符输入流管道与源文件接通:day10-io\abc\csb.txt
        //   定义一个缓冲字符输出管道与目标文件接通:day10-io\abc\csb2.txt
        try (BufferedReader br = new BufferedReader(new FileReader("day10\\abc\\csb.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("day10\\abc\\csb2.txt"));
        ) {
            // 2.定义一个List集合存储读取的每行数据 List<String> list
            List<String> list=new ArrayList<>();
            // 3.定义一个循环按照行读取数据,存入到List集合中去
            String row=null;
            while((row=br.readLine())!=null){
                list.add(row);
            }

            // 4.对List集合中的每行数据按照首字符编号升序排序
            Collections.sort(list, new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    String s1 = o1.split("\\.")[0];
                    String s2 = o2.split("\\.")[0];

                    return Integer.compare(Integer.valueOf(s1),Integer.valueOf(s2));
                }
            });

            // 6.遍历List集合中的每个元素,用缓冲输出管道写出并换行

            for (String s : list) {
                bw.write(s);
                bw.newLine();
            }

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }




    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙应用框架开发【基于原生能力的无障碍模式】

基于原生能力的无障碍模式 介绍 本示例基于系统提供的无障碍阅读能力&#xff0c;实现了无障碍扩展服务集成、原生组件屏幕朗读以及多个控件组合标注。 效果图预览 原生组件屏幕朗读&#xff1a; 创建说明&#xff1a; 在已创建工程的ets文件夹下创建accessibility文件夹&…

SCIEI双检CCF期刊,硕博毕业生的福音,投稿欲从速!

SCI&EI双检CCF期刊&#xff0c;目前已稳定检索46年&#xff0c;CCF-C类&#xff0c;且发文量稳定&#xff0c;国人友好&#xff0c;发过的人都说审稿极速。 期刊详情 【期刊简介】IF&#xff1a;4.0-5.0 JCR1区中科院3区 【出版社】Elsevier出版社 【检索情况】SCI&a…

【文件fd】深入理解和实现Linux底下一切皆文件 | 系统和语言文件操作二者关系_封装 | 系统调用为什么怎样封装成库函数

目录 1.系统调用的打开/读/写文件操作 2.如何理解Linux底下一切皆文件 2.1设备属性 2.2设备的操作方法 3.如何实现Linus底下一切皆文件 4.源码查看 5.系统和语言文件操作二者关系 5.1 flags选项和C语言的"w""a"方式 二者的关系 5.2 系统的文件描…

llama-3.1下载部署

llama-3.1 下载 下载 huggingface 详情页填写申请后等待审核 点击 头像->setting->access token 创建token 配置环境变量 下载模型 pip install -U huggingface_hubhuggingface-cli download --resume-download meta-llama/Meta-Llama-3.1-8B-Instruct --local-di…

Linux ——互斥量

1.进程线程间的互斥相关背景概念 临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区互斥&#xff1a;任何时刻&#xff0c;互斥保证有且只有一个执行流进入临界区&#xff0c;…

使用 cPanel WHM 重置 MySQL 根密码

MySQL 是托管在 cPanel 管理服务器上的网站的主要数据库软件&#xff0c;广泛用于 WordPress 和电子商务应用程序&#xff0c;例如 Magento。由于 MySQL 需要管理多个不同网站和数据库的读写权限&#xff0c;因此它是一个多用户系统。 每个用户账户都有一组权限限制其访问。而M…

【报错解决】Sql server 2022连接数据库时显示证书链是由不受信任的颁发机构颁发的

SSMS 20在连接Sql server 2022数据库时有如下报错&#xff1a; A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。 原因是尝试使…

C++进阶 二叉搜索树

目录 二叉搜索树概念 二叉搜索树的模拟实现 二叉搜索树的查找 二叉搜索树的插入 二叉搜索树的删除 二叉搜索树的性能分析 二叉搜索树的应用 K模型 KV模型 二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树…

nginx的反向代理及负载均衡

nginx的反向代理 安装包链接https://nginx.org/download/nginx-1.26.1.tar.gz yum -y install gcc gcc-c pcre-devel openssl-devel [rootstaticserver ~]# tar -xzvf nginx-1.26.1.tar.gz [rootstaticserver nginx-1.26.1]#./configure --prefix/usr/local/nginx --userngi…

怎么提高视频的声音?提高视频的声音的多种方法

在制作和编辑视频的浩瀚旅途中&#xff0c;声音质量不仅是引导观众情感波动的舵手&#xff0c;更是构建故事氛围、深化主题表达不可或缺的基石。它如同画面背后的灵魂&#xff0c;悄无声息地牵引着每一位观众的思绪&#xff0c;穿梭于现实与想象的边界。从温馨的旁白讲述到激昂…

单天下载1W+?木途美APP对比体验

在当下的民宿市场&#xff0c;木鸟、途家、美团三家民宿预订平台遥遥领先。木鸟民宿最新发布的报告中提到&#xff0c;7月以来民宿订单环比上涨88%&#xff0c;尽管酒店业进入量涨价跌时代&#xff0c;但民宿平台们似乎活得更好了。 特色房源为王永不过时 房源量大意味着覆盖…

Linux系统之DHCP服务配置

1、准备阶段 Windows&#xff08;客户端&#xff09;开启Vmnet8网卡Linux6&#xff08;服务端&#xff09;网络连接选择NAT模式&#xff0c;并配置IP地址为192.168.11.1/24Linux5&#xff08;客户端&#xff09;网络连接选择NAT模式将NAT的DHCP功能取消 2、DHCP服务器相关软件…

(vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束

(vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束 需求&#xff1a;按勾选的顺序给后端传值 难点&#xff1a;在 Element UI 的 el-cascader 组件中&#xff0c;默认的行为是根据数据的层级结构来显示选项&#xff0c;用户的选择也会基于这种层级结构&#xff0c;el-…

SQL必知必会

SQL必知必会 一些SQL知识&#xff0c;出自极客时间陈旸老师《SQL必知必会》 https://time.geekbang.org/column/intro/100029501 基础 视图 视图作为一张虚拟表&#xff0c;帮我们封装了底层与数据表的接口。它相当于是一张表或多张表的数据结果集。视图的这一特点&#x…

【C/C++】C语言到C++的入门知识点(主要适用于C语言精通到Qt的C++开发入门)

【C/C】C语言到C的入门知识点&#xff08;主要适用于C语言精通到Qt的C开发入门&#xff09; 文章目录 C语言与C的不同C中写C语言代码C语言到C的知识点Qt开发中需要了解的C基础知识namespace输入输出字符串类型class类构造函数和析构函数&#xff08;解析函数&#xff09;类的继…

20240801 每日AI必读资讯

&#x1f50a;OpenAI向ChatGPT Plus用户推出高级语音模式 - 只给一小部分Plus用户推送&#xff0c;全部Plus用户要等到秋季 - 被选中的Alpha 测试的用户将收到一封包含说明的电子邮件&#xff0c;并在其移动应用中收到一条消息。 - 同时视频和屏幕共享功能继续推出&#xff…

【论文速读】| MoRSE:利用检索增强生成技术填补网络安全专业知识的空白

本次分享论文&#xff1a;MoRSE: Bridging the Gap in Cybersecurity Expertise with Retrieval Augmented Generation 基本信息 原文作者&#xff1a;Marco Simoni, Andrea Saracino, Vinod Puthuvath, Maurco Conti 作者单位&#xff1a;意大利比萨国家研究委员会信息学与…

2024 年最新 windows 操作系统搭建部署 nginx 服务器应用详细教程(更新中)

nginx 服务器概述 Nginx 是一款高性能的 HTTP 和 反向代理 服务器&#xff0c;同时是一个 IMAP / POP3 / SMTP 代理服务器。Nginx 凭借其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。 浏览 nginx 官网&#xff1a;https://nginx.org/ Nginx 应用场景 静态…

最新保姆级教程使用WildCard开通Claude3升级ChatGPT4.0(2024.8)

如何使用 WildCard 服务注册 Claude3 随着 Claude3 的震撼发布&#xff0c;最强 AI 模型的桂冠已不再由 GPT-4 独揽。Claude3 推出了三个备受瞩目的模型&#xff1a;Claude 3 Haiku、Claude 3 Sonnet 以及 Claude 3 Opus&#xff0c;每个模型都展现了卓越的性能与特色。其中&a…

【rockyLinux·9.4】安装 java jdk

一、安装 java 1.选择版本 yum list | grep jdk各个版本之间的区别&#xff1a; 2.选择了&#xff1a;java-17-openjdk-devel.x86_64&#xff08;开发者版本&#xff09;&#xff0c;开始安装 建议安装在 /usr/local 这个目录下&#xff0c;可以创建一个 app 目录来收录它…