【JAVA入门】Day41 - 字节缓冲流和字符缓冲流

news2024/9/18 5:21:01

【JAVA入门】Day41 - 字节缓冲流和字符缓冲流


文章目录

  • 【JAVA入门】Day41 - 字节缓冲流和字符缓冲流
    • 一、缓冲流的体系结构
    • 二、字节缓冲流
      • 2.1 字节缓冲流提高效率的底层原理
    • 三、字符缓冲流


        在IO流体系中,FileInputStream,FileOutputStream,FileReader,FileWriter 其实都只是基本流,Java 中还有一些针对他们做出优化的高级流。
在这里插入图片描述

一、缓冲流的体系结构

在这里插入图片描述

        针对字节和字符,Java 分别发明了它们各自的缓冲流。缓冲流一共有四种,Buffered 代表缓冲区,它可以使得读写数据时非常高效

二、字节缓冲流

        字节缓冲流底层自带了一次可以读写 8192 长度的缓冲区。它的构造方法是将基本流通过一个方法进行包装,加入缓冲区。
在这里插入图片描述
        以下演示了如何利用字节缓冲流来拷贝一个文件:

package BufferedStream;

import java.io.*;

public class BufferedStreamDemo1 {
    public static void main(String[] args) throws IOException {
        /*
            字节缓冲流拷贝文件(一次读写一个字节)
         */

        //1.创建缓冲流对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a.txt"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a_Copied.txt"));

        //2.循环读取并写入目的地
        int b;
        while((b = bis.read()) != -1){
            bos.write(b);
        }

        //3.释放资源
        bos.close();
        bis.close();
    }
}

package BufferedStream;

import java.io.*;

public class BufferedStreamDemo2 {
    public static void main(String[] args) throws IOException {
        /*
            字节缓冲流拷贝文件(一次读写一个字节数组)
         */

        //1.创建缓冲流对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a.txt"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a_Copied.txt"));

        //2.字节数组
        byte[] bytes = new byte[1024 * 1024 * 5];
        int len;
        while((len = bis.read(bytes)) != -1){
            bos.write(bytes,0,len);
        }

        //3.关闭流
        bos.close();
        bis.close();
    }
}

2.1 字节缓冲流提高效率的底层原理

        字节缓冲流读写数据的内存结构如下图所示:
在这里插入图片描述
        可以看到,读写数据时,字节数据是在内存中的缓冲区进行倒手的,而内存的读写数据是非常非常快的,它的读写速度快到这个倒手的过程可以忽略不计,大大节省了数据与硬盘之间的交互时间。

三、字符缓冲流

        字符流本身就具有缓冲区,速度已经很快,而字符缓冲流进一步加快了读写速度。
在这里插入图片描述
        其构造方法如下:
在这里插入图片描述
        特别的是,字符缓冲流中还有两个非常有用的特有方法:
在这里插入图片描述
        readLine() 方法让我们可以一行一行读取数据,newLine() 方法是一个跨平台的换行方法,使用它可以保证在 Windows、Linux、Mac 所有操作系统下的换行都能生效且不会出错。
① 字符缓冲输入流的用法:

package BufferedStream;

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

public class BufferedStreamDemo3 {
    public static void main(String[] args) throws IOException {
        /*
            字符缓冲输入流
         */

        //1.创建字符缓冲输入流对象
        BufferedReader br = new BufferedReader(new FileReader("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\a.txt"));

        //2.一行一行读
        String line;
        while((line = br.readLine()) != null) {
            System.out.println(line);
        }


        //3.释放资源
        br.close();
    }
}

② 字符缓冲输出流的用法:

package BufferedStream;

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

public class BufferedStreamDemo5 {
    public static void main(String[] args) throws IOException {
        /*
            字符缓冲输出流
         */

        //1.创建
        BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\IdeaProjects\\HelloWord\\src\\BufferedStream\\b.txt"));


        //2.写出数据
        bw.write("你嘴角上扬的样子,百度搜索不到");
        bw.newLine();       								//跨平台换行
        bw.write("以后如果我结婚了,你一定要来哦,没有新娘我会很尴尬");
        bw.newLine();

        //3.释放资源
        bw.close();
    }
}

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

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

相关文章

Java企业面试题2

1.语言的分代: 第1代:机器语言 机器语言是最底层的计算机编程语言,它是由二进制数构成的一系列指令,直接与计算机硬件交互。每个二进制位模式代表一条特定的指令或数据地址。因为它是直接在硬件上执行的,所以运行效率…

如何增加Google收录量?

想增加Google收录量,首先自然是你的页面数量就要多,但这些页面的内容也绝对不能敷衍,你的网站都没多少页面,谷歌哪怕想收录都没办法,当然,这是一个过程,持续缓慢的增加页面,增加网站…

如何使用ArcGIS Pro绘制三维地图

如何使用ArcGIS Pro将栅格数据用三维的形式进行表达?在ArcGIS里可以使用ArcScene来实现,ArcGIS Pro实现原理跟ArcScene一致。由于Esri未来将不再对ArcGIS更新,所以可以尽快把ArcGIS Pro熟悉起来了~ 下面介绍一下如何将栅格数据以三维形式展示…

《澳门新攻略》诚意收官 澳门文旅综艺缔造新高度

日前刚刚收官的芒果TV综艺《澳门新攻略》,开辟新的视角将节目重点聚焦在了澳门北区的社区美食上。把应接不暇的美食美景和最本土的人文融合在一起,带火了澳门当地旅游业又一黑马行程——澳门深度社区游。随着线上综艺有趣、保姆级打卡攻略的呈现&#xf…

【C++】——vector

文章目录 vector介绍vector的使用vector的构造vector迭代器vector空间增减vector增删查改 vector介绍 vector是一个动态数组,可以根据需求变大变小vector支持随机访问vector会自动管理内存分配和释放vector在尾部添加和删除的效率非常高,中间和头部插入较…

reader-lm:小模型 html转markdown

参考: https://huggingface.co/jinaai/reader-lm-0.5b 在线demo: https://colab.research.google.com/drive/1wXWyj5hOxEHY6WeHbOwEzYAC0WB1I5uA#scrollTo0mG9ISzHOuKK 输入网址:https://www.galaxy-geely.com/E5 结果: 代码…

搭建ipv6并发代理池

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 学习目标 ipv6代理池学习…

UI自动化测试痛点解决方案

前言 UI自动化测试可以快速、准确地执行大量的测试用例,减少人工测试所需的时间和劳动力。能够在短时间内完成多个测试用例的执行,提高测试的效率和速度。但是UI自动化有个最大的痛点。当前端界面发生变化时,往往页面元素定位也会改变&#…

ultralytics实现DeepSort之级联匹配

前面博客中说过,通过Market-1501数据集的训练后可以得到特征提取模型,这个模型最终的输出值为(bs,num_class),但在DeepSort算法应用中的输出结果并非如此,其输出的是特征信息。 特征提取 通过训练后的特征…

通信工程学习:什么是PDF策略决策功能

PDF策略决策功能 PDF策略决策功能(Policy Decision Function, PDF)在通信网络中,特别是在IP多媒体子系统(IMS)中,扮演着至关重要的角色。以下是对PDF策略决策功能的详细解释: 一、定义与功能概…

C语言——课设万能模板、实战项目——学生信息管理系统

本人无偿奉献学生管理系统的所有代码,包括.h头文件和.c文件,要源码私信,或者评论,希望点个关注。可以完整运行。 介绍一下这个系统,该系统包括八个功能: printf("1.录入学生信息\n"); print…

软考中级软件设计师-【计算机系统】必考题汇总

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…

中原地产:人力资源数字化创新实践分享

近日,法大大与人力资源智享会(以下简称“智享会”)联合发布了《第七届人力资源共享服务中心研究报告》(点击阅读及下载:最新!《第七届人力资源共享服务中心研究报告》重磅来袭),该报…

2024【华为战报】8月HCIP考试战报!

了解更多往期考试→点 【考试战报】 华为认证 HCIP 8月 微思 | HCIP 考试战报 HCIP 最新开班 厦门面授 全国直播 每月循环开班 点击查看【华为认证 HCIP】 END 微思网络,始于2002年 专业IT认证培训22年,面向全国招生! 微思-主要课程有&a…

【App】

1. 移动App的开发模式 原生开发 - 原生App > Android、IOS、Windows混合开发 - 混合App > React Native、Weex、Flutter React Native 是基于 React 语法开发的一个混合开发框架Weex 是基于 Vue 语法开发的一个混合开发框架Flutter 是 Google 推出来的一款混合开发框架比…

AI大模型全栈工程师课程笔记 - RAG 检索增强生成

文章目录 \1. RAG\2. 构建流程 2.1 文档加载与切分2.2 传统检索引擎2.3 LLM接口封装2.4 构建prompt \3. 向量检索\4. 向量数据库\5. 基于向量检索的RAG\6. 进阶知识 6.1 文本分割粒度6.2 检索后再排序6.3 测试 1. RAG RAG(Retrieval Augmented Generation&#…

计算机网络 --- 计算机网络的分类

一、计算机网络分类 1.1 按分布范围分类 举例:广域网(WAN)、局域网(LAN) 举例:个域网(PAN) 1.2 按传输技术分类 广播式网络――当一台计算机发送数据分组时,广播范围…

xmake与包管理:又一个现代c++构建工具?

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 主要起因是我在逛Reddit帖子时,看到关于一些c构建系统的评价. cmake似乎有些过于复杂,它与vcpkg,conan的包管理之间的"融合"可能在有些时候也显得麻烦. 一些人尝试了我没见过的选项, 所以这里主要试试除了…

推荐一款开源的API开放平台,5分钟就可以搭建企业专属的API开放门户!

在过去的十年中,企业API治理并未受到广泛关注。然而,随着时间的推进,特别是在近几年,企业技术管理者对API治理的重视程度显著提高,开始将API视为企业资产的重要组成部分。API不再仅仅是技术层面的概念,而是…

场外期权合法吗?

今天期权懂带你了解场外期权合法吗?场外期权是指在场外市场进行交易的期权合约,而非在标准化交易所进行交易。这些期权合约通常由交易双方直接协商具体条款,包括到期时间、行权价格和标的资产等。 场外期权主要特点 1.定制化:OT…