Java基础学习(15)

news2024/11/24 19:18:15

Java基础学习

  • 一、IO流进阶
    • 1.1 缓冲流
      • 1.1.1字节缓冲流
      • 1.1.2 字符缓冲流
    • 1.2 转换流
    • 1.3 序列流
    • 1.4 反序列化流 /对象操作输入流
      • 1.4.1 序列化流/反序列化流的细节汇总
    • 1.5 打印流
      • 1.5.1 字节打印流
      • 1.5.2 字符打印流
    • 1.6 解压流、压缩流
    • 1.7 Commons-io
    • 1.8 hutool工具包

一、IO流进阶

1.1 缓冲流

体系图:
在这里插入图片描述
原理:底层自带了长度为8192的缓冲区提高性能

1.1.1字节缓冲流

方法名称说明
public BufferedInputStream(InputStream is)把基本流包装成高级流提高读取数据的性能
public BufferedOutputStream(Outputstream os)把基本流包装成高级流,提高写出数据的性能
import java.io.*;

//通过字节缓冲流来拷贝文件
public class Exercise5 {
    public static void main(String[] args) throws IOException {
        //创建读取的字节缓冲对象
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\Java文件夹\\words\\IOExrecise\\src\\sad\\a.txt"));
        //创建书写的字节缓冲流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\Java文件夹\\words\\IOExrecise\\src\\sad\\b.txt"));

        //循环续写
        int len;
        while ((len = bis.read()) != -1){
            bos.write((char)len);
        }

        //回收资源
        bos.close();
        bis.close();
    }
}

在写的时候要注意:清理资源时,只需要清理字节缓冲流,里面的字节流在源码已经清理

提高效率的原理图:
在这里插入图片描述

主要是节约了读写的时间,在内存当中来回交换数据的时间可以忽略不计

1.1.2 字符缓冲流

方法名称说明
public BufferedReader(Reader r)把基本流变成高级流
public Bufferedwriter(writer r)把基本流变成高级流

字符缓冲流特有方法
在这里插入图片描述

package IO.IO_BufferedStream;

import java.io.*;

public class Dome2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("src\\IO_Test\\aaaa.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src\\IO_Test\\aaab.txt"));
        //一次性输入一行
        //String s = br.readLine();
        //System.out.println(s);

        String s ;
        while ((s = br.readLine())!=null){
            //输出的时候需要打印换行
            bw.write(s);
            bw.newLine();
        }
        bw.close();
        br.close();
    }
}

1.2 转换流

是字符流和字节流之间的桥梁
在这里插入图片描述
作用1: 指定字符集读写(淘汰)
作用2:字节流想要使用字符流中的方法
InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr);

package IO.IO_ConverStream;

import java.io.*;
import java.nio.charset.Charset;

public class Dome1 {
    public static void main(String[] args) throws IOException {
        /*
        JDK11之后就淘汰了
        把GBK编码规则的文件在UTF-8的环境中打印出来
        //"C:\Users\20265\Desktop\ConverDome1.txt"
        InputStreamReader isr =new InputStreamReader(new FileInputStream("C:\\Users\\20265\\Desktop\\ConverDome1.txt"),"GBK");
        //得到里面的数据
        int len;
        while ((len = isr.read())!=-1){
            System.out.print((char) len);
        }
        isr.close();
        */
		//JDK11之后使用的方式
        FileReader fr = new FileReader(new File("C:\\\\Users\\\\20265\\\\Desktop\\\\ConverDome1.txt"), Charset.forName("GBK"));
        //得到里面的数据
        int len;
        while ((len = fr.read())!=-1){
            System.out.print((char) len);
        }
        fr.close();
    }
}

1.3 序列流

可以把java中的对象写到本地文件中

但是我们是看不懂的,但是可以通过反序列流来翻译

在这里插入图片描述

构造方法说明
public ObjectOutputstream(OutputStream out)把基本流包装成高级流
成员方法说明
public final void writeobject(object obi)把对象序列化(写出)到文件中去

序列化流的小细节:

使用对象输出流将对象保存到文件时会出现NotserializableException异常

解决方案: 需要让Javabean类实现Serializable接口

public class Student implements Serializable

package ObjectOutputstreams;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;

//初识ObjectOutputstream
public class Dom1 {
    public static void main(String[] args) throws IOException {
        //创建Student对象
        Student stu = new Student("华盛顿", 55);
        //创建序列化流对象
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:\\Java文件夹\\words\\IOExrecise\\src\\sad\\ab\\e.txt"));
        //写入数据
        oos.writeObject(stu);
        //清理资源
        oos.close();
    }
}

1.4 反序列化流 /对象操作输入流

可以把序列化到本地文件中的对象,读取到程序中来

构造方法说明
public ObjectInputstream(Inputstream out)把基本流变成高级流
成员方法说明
public object readobject()把序列化到本地文件中的对象,读取到程序中来
package ObjectOutputstreams;

import java.io.*;

//初识反序列化流
public class Dom2 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //创建反序列化流对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\Java文件夹\\words\\IOExrecise\\src\\sad\\ab\\e.txt"));

        //读取数据
        Object o = ois.readObject();
        System.out.println(o);
        //清理资源
        ois.close();
    }
}

1.4.1 序列化流/反序列化流的细节汇总

  • 使用序列化流将对象写到文件时,需要让lavabean类实现Serializable接口。否则,会出现NotSerializableException异常
  • 序列化流写到文件中的数据不能修改的,一旦修改就无法再次读回来了
  • 序列化对象后,修改了Javabean类,再次反序列化,会不会有问题?
    会出问题,会抛出InvalidclassException异常
    • 解决方案:给Javabean类添加serialVersionUID (序列号、版本号)
  • 如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?
    • 解决方案:给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程
package IO.ObjectStream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Dome1 {
    public static void main(String[] args) throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src\\IO\\ObjectStream\\Dome.txt"));

        oos.writeObject(new Student());

        oos.close();
    }
}
package IO.ObjectStream;

import java.io.Serializable;

public class Student implements Serializable {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

1.5 打印流

基本位置展现
在这里插入图片描述
分类:打印流一般是指: PrintStream,PrintWriter两个类

特点

特点1打印流只操作文件目的地,不操作数据源
特点2:特有的写出方法可以实现,数据原样写出
例如:打印:97文件中:97 文件中:true打印: true
特点3:特有的写出方法可以实现自动刷新,自动换行打印一次数据 = 写出 + 行 + 刷新

1.5.1 字节打印流

在这里插入图片描述
在这里插入图片描述

字节流底层没有缓冲区,开不开自动刷新都一样

package MyPrintStream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.nio.charset.Charset;

//创建
public class Dom1 {
    public static void main(String[] args) throws FileNotFoundException {
        //创建字节打印流
        PrintStream ps = new PrintStream(new FileOutputStream("a.txt"), true, Charset.forName("UTF-8"));

        //利用特殊方法写入数据
        ps.println(97);
        ps.printf("%s嘲笑了%s","张三","李四");
        ps.println();
        ps.print('c');

        //清理资源
        ps.close();
    }
}

1.5.2 字符打印流

字符流底层有缓冲区,想要自动刷新需要开启

在这里插入图片描述
在这里插入图片描述

package MyPrintStream;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;

//创建字符打印流
public class Dom2 {
    public static void main(String[] args) throws IOException {
        //创建字符打印流
        PrintWriter pw = new PrintWriter(new FileWriter("a.txt"), true);

        //添加数据
        pw.println(97);
        pw.printf("%s嘲笑了%s","张三","李四");
        pw.println();
        pw.print('c');

        //清理资源
        pw.close();
    }
}

总结:
1.打印流有几种?各有什么特点?

  • 有字节打印流和字符打印流两种
  • 打印流不操作数据源,只能操作目的地
  • 字节打印流:默认自动刷新,特有的println自动换行
  • 字符打印流:自动刷新需要开启,特有的println自动换行

1.6 解压流、压缩流

结构图:
在这里插入图片描述
解压本质: 把每一个ZipEntry按照层级拷贝到本地另一个文件夹中
解压代码 :

package MyzipStream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

//解压zip文件
public class MyZipStream {
    public static void main(String[] args) throws IOException {
        //创建一个需要解压的zip文件地址
        File start = new File("E:\\Java文件夹\\words\\IOExrecise\\src\\sad.zip");
        File dest = new File("E:\\");

        //定义一个方法去实现压缩
        Creat(start,dest);
    }

    private static void Creat(File start, File dest) throws IOException {
        //创建zip对象压缩
        ZipInputStream zip = new ZipInputStream(new FileInputStream(start));
        //创建第三方变量来接收获取到的文件(夹)名称
        ZipEntry entrys;
        while ((entrys = zip.getNextEntry()) != null){
            System.out.println(entrys);
            //判断当前是文件还是文件夹
            if (entrys.isDirectory()){
                //是文件夹,就创建一个同名下的文件夹,接收数据
                File file = new File(dest, entrys.toString());
                file.mkdirs();
            }else {
                //是文件,就创建一个同名下的文件,接收数据
                FileOutputStream fos = new FileOutputStream(new File(dest, entrys.toString()));
                int len;
                while ((len = zip.read()) != -1){
                    fos.write(len);
                }
                fos.close();
                //表示当前文件夹已经处理完,开启下一个文件夹
                zip.closeEntry();
            }

        }
        zip.close();
    }
}

压缩文件夹代码:

package MyzipStream;

import java.io.*;
import java.lang.annotation.Target;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


//压缩文件夹
public class MyZipOutStram2 {
    public static void main(String[] args) throws IOException {
        //需要压缩文件的位置
        File start = new File("E:\\Java文件夹\\words\\IOExrecise\\src\\sad");
        //压缩完存放zip的地址
        File destParent = new File("E:\\Java文件夹\\words\\IOExrecise\\src\\");
        File dest = new File(destParent, start.getName()+".zip");
        //创建压缩流
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));
        //获取到上一级名称
        String name = start.getName();
        toZip(start,zos,name);

        zos.close();
    }
    //创建一个方法去压缩文件夹
    private static void toZip(File start, ZipOutputStream zos, String name) throws IOException {
        //遍历源文件
        File[] files = start.listFiles();
        for (File file : files) {
            //进行判断是文件还是文件夹
            if (file.isFile()){
                //是文件,进行下列操作
                //创建ZipEntry对象在里面
                ZipEntry entry = new ZipEntry(name +"\\"+ file.getName());
                //将创建的ZipEntry放入到压缩包当中
                zos.putNextEntry(entry);
               //将数据读取加入到里面
                FileInputStream fis = new FileInputStream(file);
                int len;
                while ((len = fis.read()) != -1){
                    zos.write(len);
                }
                //清理资源
                fis.close();
                zos.closeEntry();

            }else {
                //是文件夹,进行下列操作
                //递归
                toZip(file,zos,name+"\\"+file.getName());
            }
        }
        zos.close();
    }


}

1.7 Commons-io

Commons-io是apache开源基金组织提供的一组有关IO操作的
开源工具包作用:提高IO流的开发效率。

"食用"步骤:

  • 在项目中创建一个文件夹: lib
  • 将jar包复制粘贴到lib文件夹
  • 右键点击jar包,选择Addas Library -> 点击OK
  • 在类中导包使用
FileUtils类(文件/文件夹相关)说明
static void copyFile(File srcFile,File destFile)复制文件
static void copyDirectory(File srcDir,File destDir)static void复制文件夹
copyDirectoryToDirectory(File srcDir,File destDir)复制文件夹
static void cleanDirectory(File directorv)清空文件
static String readFileToString(File file,Charset encoding)夹读取文件中的数据变成成字符串
static void write(File file,CharSequence data,String encoding)写出数据
static void deleteDirectory(File directory)删除文件夹

在这里插入图片描述

package commonsIOs;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

public class commonsIOsDom1 {
    public static void main(String[] args) throws IOException {
        //源数据地点
        File start = new File("E:\\Java文件夹\\words\\IOExrecise\\src\\sad\\a.txt");
        //拷贝到的地点
        File dest = new File("E:\\Java文件夹\\words\\IOExrecise\\src\\sad\\copy.txt");

        //复制文件
        FileUtils.copyFile(start,dest);

        //复制文件夹(将内容复制)
        File dest1 = new File("E:\\Java文件夹\\words\\IOExrecise\\src\\sad\\copydir");
        File start1 =  new File("E:\\Java文件夹\\words\\IOExrecise\\src\\sad\\ab");
        FileUtils.copyDirectory(start1,dest1);

        //复制文件夹(将文件夹打包全部放到目的文件夹当中)
        FileUtils.copyDirectoryToDirectory(start1,dest1);

        //清空文件夹
        FileUtils.cleanDirectory(dest1);

        //删除文件夹
        FileUtils.deleteDirectory(dest1);
    }
}

1.8 hutool工具包

相关类说明
IoUtil流操作工具类
FileUtil文件读写和操作的工具类
FileTypeUtil文件类型判断工具类
WatchMonitor目录、文件监听
ClassPathResource针对ClassPath中资源的访问封装
FileReader封装文件读取
Filewriter封装文件写入

官网:https://hutool.cn/
API文档:https://apidoc.gitee.com/dromara/hutool/
中文使用文档: https://hutool.cn/docs/#/

相关方法
file: 根据参数创建一个file对象touch: 根据参数创建文件
writeLines: 把集合中的数据写出到文件中,覆盖模式。
appendLines: 把集合中的数据写出到文件中,续写模式。
readLines: 指定字符编码,把文件中的数据,读到集合中。
readutf8Lines: 按照UTF-8的形式,把文件中的数据,读到集合中
copy: 拷贝文件或者文件夹

package Myhutool;

import cn.hutool.core.io.FileUtil;

import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Dom1 {
    public static void main(String[] args) {

        //添加File对象E:\Java文件夹\words\IOExrecise\a.txt
        File file1 = FileUtil.file("E:\\", "Java文件夹\\words\\", "IOExrecise\\b.txt");
        System.out.println(file1);//E:\Java文件夹\words\IOExrecise\a.txt

        //根据参数来创建文件,文件的若不存在就会自动创建(无父级路径也可以)
        File touch = FileUtil.touch(file1);
        System.out.println(touch);

        //将一个集合导入到文件当中
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("aaa");
        list.add("aaa");
        FileUtil.writeLines(list,file1,"UTF-8");

        //续写添加集合
        FileUtil.appendLines(list,file1,"UTF-8");

        //读数据,放到一个集合当中存储起来
        List<String> list1 = FileUtil.readLines("E:\\Java文件夹\\words\\IOExrecise\\b.txt", "UTF-8");
        System.out.println(list1);
    }
}

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

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

相关文章

【C#】RemoveAt索引越界问题

系列文章 【C#】单号生成器&#xff08;编号规则、固定字符、流水号、产生业务单号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器&#xff08;开始日期、结束日期&#xff09; 本文链接&#xff1a;h…

使用FFMPEG和SDL2实现音视频同步的简易视频播放器

程序框架 由于之前都是针对FFMPEG某一个功能做的测试和学习。这里我简单做了一个视频播放器&#xff0c;并简单做了音视频同步。在此记录大致过程。 大致框架如下&#xff1a; 主线程 1.加载视频文件&#xff0c;查找音视频流信息 2.初始化音视频解码器 3.初始化SDL并设置…

题解校验码—CRC循环校验码与海明校验码

码距 一个编码系统的码距是任意两个码字的最小距离。 例如个编码系统采用三位长度的二进制编码&#xff0c;若该系统有四种编码分别为&#xff1a;000&#xff0c;011&#xff0c;100&#xff0c;111&#xff0c;此编码系统中000与111的码距为3&#xff1b;011与000的码距为2…

POE:性价比最高的 AI 整合网站

创作不易&#xff0c;如果本文对你有帮助&#xff0c;胖友记得一键三连 &#x1f62d;。更多 AI 优质内容推荐请关注主页 “AI” 专栏&#xff0c;笔者会不定期更新觉得自己用下来还不错的 AI 相关产品。 1.介绍 Poe 是一款同时整合了 ChatGPT、Sage、GPT-4、Claude、Claude-in…

经典神经网络(2)AlexNet及其在Fashion-MNIST数据集上的应用

2、深度卷积神经网络AlexNet ImageNet 数据集&#xff1a;一个开源的图片数据集&#xff0c;包含超过 1400万张图片和图片对应的标签&#xff0c;包含2万多个类别。 自从2010 年以来&#xff0c;ImageNet 每年举办一次比赛&#xff0c;即&#xff1a;ImageNet 大规模视觉识别挑…

数组排序算法

数组排序算法 一、冒泡排序算法二、直接选择排序三、插入排序四、反转排序 一、冒泡排序算法 冒泡排序算法&#xff1a; 类似气泡上涌的动作&#xff0c;会将数据在数组中从小到大或者从大到小不断向前移动。 基本思想&#xff1a; 冒泡排序的基本思想是对比相邻的两个元素值&…

并发编程(二) — 内存可见性问题

目录 前言 内存可见性问题 synchronized volatile CAS算法 CAS算法原理 CAS算法应用场景 CAS算法代码实现 参考目录 前言 在谈共享变量的内存可见性问题之前&#xff0c;先谈谈线程安全问题 &#xff0c;线程安全问题是指当多个线程同时读写一个共享资源并且没有任何同…

c高级day4作业

有m1.txt m2.txt m3.txt m4.txt&#xff0c;分别创建出对应的目录&#xff0c;m1 m2 m3 m4 并把文件移动到对应的目录下使用break关键字打印九九乘法表&#xff0c;提示&#xff1a;printf "%d * %d %d" $i $j $((i*j)) #!/bin/bash for i in m1 m2 m3 m4 do#文件夹…

只限今日免费,Midjourney 5.1震撼更新!逼真到给跪,中国情侣细节惊艳,3D视频大片马上来

来源 | 新智元 微信号&#xff1a;AI-era 【导读】全新升级的Midjourney让全网又疯狂了&#xff0c;创造力解禁&#xff0c;出图更逼真。重要的是&#xff0c;限时免费到今天&#xff0c;要玩的抓紧了。 一个月前&#xff0c;Midjourney V5画的一对中国完美情侣在网上爆火&am…

涅槃重生,BitKeep如何闯出千万用户新起点

在全球&#xff0c;BitKeep钱包现在已经有超过千万用户在使用。 当我得知这个数据的时候&#xff0c;有些惊讶&#xff0c;也有点意料之中。关注BitKeep这几年&#xff0c;真心看得出这家公司的发展之迅速。还记得2018年他们推出第一个版本时&#xff0c;小而美&#xff0c;简洁…

python和pycharm的安装(安装包免费下载共享)

说明&#xff1a; 本文内容包括Python和Pycharm安装。 一、python安装&#xff1a; python是一门编程语言&#xff0c;安装python是为了能在电脑上使用这门语言。 1、python下载 下载链接&#xff1a;https://pan.baidu.com/s/1mWsJjO8HngNQtINCzu0bBA 提取码&#xff1a;9…

又又又发现了一个 AI 插件神器 TeamSmart

简介 TeamSmart AI 是最近比较火的 Chrome 插件&#xff0c;它是基于 ChatGPT 集成的 AI 助手团队工具 对&#xff0c;没错&#xff0c;是一个团队。这个团队里面有许多不同角色的成员&#xff0c;每隔成员都有自己的专业领域&#xff0c;比如商业、市场营销、灵魂写手、程序…

批量查看域名历史软件-网站老域名批量查询注册

未注册备案域名批量扫描软件 未注册备案域名批量扫描软件是专门用于批量扫描未备案的域名的一种工具。它可以快速识别未备案的域名&#xff0c;并帮助用户抓住还未被注册的值得备案的域名&#xff0c;以便用户及时注册备案并使用。 该软件主要具有以下几个优点&#xff1a; 高…

【小程序】输入框检验姓名、身份证(正则表达式)并提交

目标 输入绑定姓名、身份证号并进行校验若未填或校验不通过则显示绑定失败的轻提示若通过校验并提交则显示绑定成功 使用Vant Weapp (gitee.io)库。 思路与代码 html&#xff1a; wx:model绑定输入框输入的值data-key是一个属性&#xff0c;在js中的e.currentTarget.datase…

【新星计划-2023】ARP“攻击”与“欺骗”的原理讲解

网络管理员在网络维护阶段需要处理各种各样的故障&#xff0c;出现最多的就是网络通信问题。除物理原因外&#xff0c;这种现象一般是ARP攻击或ARP欺骗导致的。无论是ARP攻击还是ARP欺骗&#xff0c;它们都是通过伪造ARP应答来实现的。 一、ARP攻击原理 一般情况下&#xff0…

TypeScript语言编译命令

1. 安装 npm install -g typescript2. 编译 tsc工具是TypeScript编译器的控制台接口&#xff0c;它可以将TypeScript文件编译成JavaScript文件&#xff1b; 编译文件&#xff1a; tsc [options] [file ...]查看编译命令的帮助信息&#xff1a; tsc --help或者 tsc -h或者 tsc…

微服架构基础设施环境平台搭建 -(一)基础环境准备

微服架构基础设施环境平台搭建 -&#xff08;一&#xff09;基础环境准备 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台&#xff0c;以微服务为服务中心&#xff0c;在此基础之上构建业务中台&#xff0c;并通过Jekins自动构建、编译、测试、发布的自动…

【Java AWT 图形界面编程】IntelliJ IDEA 乱码问题最佳配置方案 ( 配置文件编码 | 配置编译器编码参数 | 配置运行时编码参数 )

文章目录 一、IntelliJ IDEA 乱码问题二、IntelliJ IDEA 乱码问题最佳配置方案1、文件编码设置成 UTF-82、编译器编码参数设置成 UTF-83、 配置运行时编码参数为 GBK 一、IntelliJ IDEA 乱码问题 在 IntelliJ IDEA 中开发 AWT / Swing 图形界面程序 , 经常遇到乱码问题 ; 文件…

博文的跑路笔记

HTML CSS Flex布局 使用flex布局 容器 .box {display: flex; }行内元素 .box {display: inline-flex; }flex布局后&#xff0c;float、vertical-align、clear失效。 容器属性 flex-direction&#xff1a;主轴方向 属性值 row&#xff1a;子元素起点在左&#xff0c;左到右。…

初级面试问到rabbitMQ,看这一篇文章就够了!

一、rabbitMQ的基础要点回顾 1.使用场景 1&#xff09;解耦&#xff1a;使用消息队列避免模块间的直接调用。将所需共享的数据放在消息队列中&#xff0c;对于新增的业务模块&#xff0c;只要对该类消息感兴趣就可以订阅该消息&#xff0c;对原有系统无影响&#xff0c;降低了…