当前位置: 首页 > news >正文

字节流和字符流的相关知识

目录

  • 1. Writer
    • 1.1 写两行数据
    • 1.2 换一种方式
    • 1.3 追加数据
    • 1.4 写很多数据,记得要清一下缓存
    • 1.5 用数组、字符串写入
  • 2. Reader
    • 2.1 读个文件
    • 2.2 读取字符
    • 2.3 读取数据到数组
    • 2.4 复制文件
  • 3. InputStream
  • 4. OutputStream
  • 5. 参考链接

1. Writer

Writer类是Java.io包中的一个抽象类,用来将字符或字符串写入到输出流中。Writer类继承了Java.io.Writer类的一些方法,并添加了一些新的方法来实现字符和字符串的输出。Writer类是抽象类,不能直接使用,需要使用他的子类对象来操作输出流。

Writer类的常用子类有:

  1. FileWriter:用于将字符或字符串写入文件中。
  2. StringWriter:用于将字符或字符串写入到字符串缓冲区中。
  3. BufferedWriter:将文本数据写入到输出流中,比如文件或网络连接。它可以一次写入一个字符、字符数组或字符串,并将数据缓存到内存中,然后在适当的时候将缓冲区中的数据一次性写入输出流。

使用BufferedWriter的步骤如下:

  1. 创建一个BufferedWriter对象,可以通过传入一个Writer对象作为参数来实现。
  2. 使用BufferedWriter的write方法将数据写入缓冲区。
  3. 使用BufferedWriter的flush方法将缓冲区中的数据写入输出流,可以在写入完毕后调用该方法,也可以在需要时手动调用。
  4. 使用BufferedWriter的close方法关闭输出流,关闭之前会自动调用flush方法。

举几个例子:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class BufferedWriterExample {public static void main(String[] args) {try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {String data = "Hello, World!";writer.write(data);writer.flush();} catch (IOException e) {e.printStackTrace();}}
}

1.1 写两行数据

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class BufferWriterDemo {public static void main(String[] args) {//创建高效缓冲字符输出流BufferedWriter writer = null;try {writer = new BufferedWriter(new FileWriter("test.txt"));//写一行数据writer.write("helloworld");//换行writer.newLine();writer.write("helloworld");writer.flush();} catch (IOException e) {e.printStackTrace();} finally {//资源关闭if(writer != null){try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}
}

test.txt
test.txt

1.2 换一种方式

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class IODemo1{public static void main(String[] args) {//创建一个文件File file = new File("test.txt");Writer writer = null;try {//IO流是需要关闭的,如果不这样设计就会不能关闭资源writer = new FileWriter(file);writer.write("HelloWorld");} catch (IOException e) {e.printStackTrace();}finally {//判断writer不是空防止空指针异常if(writer != null) {try {//关闭流writer.close();} catch (IOException e) {e.printStackTrace();}}}}}

1.3 追加数据

import java.io.IOException;
import java.io.Writer;
import java.io.FileWriter;
import java.io.File;public class IOTest4 {public static void main(String[] args) {Writer writer = null;try {//IO流是需要关闭的,如果不这样设计就会不能关闭资源//writer = new FileWriter("test1.txt", true);writer = new FileWriter(new File("test.txt"), true);writer.write("liangliang");} catch (IOException e) {e.printStackTrace();}finally {//判断writer不是空防止空指针异常if(writer != null) {try {//在关闭前会做flush的事情writer.close();} catch (IOException e) {e.printStackTrace();}}}}
}

1.4 写很多数据,记得要清一下缓存

import java.io.IOException;
import java.io.Writer;
import java.io.FileWriter;
import java.io.File;public class IOTest5 {public static void main(String[] args) {//创建一个文件File file = new File("test.txt");Writer writer = null;try {//IO流是需要关闭的,如果不这样设计就会不能关闭资源writer = new FileWriter(file);for (int i = 0; i < 100; i++) {writer.write("HelloWorld\r\n");//每次写入10个helloworld的时候做一次flushif(i % 10 == 0){writer.flush();}}} catch (IOException e) {e.printStackTrace();}finally {//判断writer不是空防止空指针异常if(writer != null) {try {//在关闭前会做flush的事情writer.close();} catch (IOException e) {e.printStackTrace();}}}}
}

1.5 用数组、字符串写入

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class IOTest6 {public static void main(String[] args) {//创建一个文件File file = new File("test.txt");Writer writer = null;try {writer = new FileWriter(file);//定义一个数组char[] c = {'a','b','p','b','p'};/*writer.write(c);//把数组中的一部分写入文件writer.write(c, 2, 2);writer.write(97);*/writer.write("helloworld", 2, 2);} catch (IOException e) {e.printStackTrace();}finally {if(writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}}

2. Reader

Reader是所有字符输入流的父类,它是一个抽象类,用于读取字符数据。与InputStream不同,Reader操作的是字符,适用于文本文件的读取。

Java提供了多种Reader的实现类,例如:

  • FileReader:用于从文件中读取字符数据。
  • CharArrayReader:从字符数组中读取数据。
  • BufferedReader:提供缓冲功能,提高读取效率。
  • StringReader:从字符串中读取数据。

举几个例子:

2.1 读个文件

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;public class BufferReaderDemo {public static void main(String[] args) {BufferedReader reader = null;try{reader = new BufferedReader(new FileReader("IO操作/CopyDemo1.java"));String line = null;while((line = reader.readLine()) != null){System.out.println(line);}}catch(Exception e){e.printStackTrace();}finally{if(reader != null){try{reader.close();}catch(IOException e){e.printStackTrace();}}}}
}

2.2 读取字符

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class ReaderDemo {public static void main(String[] args) {Reader reader = null;File file = new File("test.txt");try{//创建出入流对象FileReaderreader = new FileReader(file);//读取数据, 读取的字符被转换成了ascii  单个字符读取int c = reader.read();System.out.println((char)c);c = reader.read();System.out.println((char)c);//如果读取到的是-1后面就没有字符了c = reader.read();System.out.println(c);}catch(Exception e){e.printStackTrace();}finally{//关闭资源if(reader != null){try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}
}

2.3 读取数据到数组

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Arrays;public class ReaderDemo2 {public static void main(String[] args) {File file = new File("test.txt");Reader reader = null;try {//创建出入流对象FileReaderreader = new FileReader(file);//定义一个数组   字符 charchar[] cs = new char[5];//向字符数组中填数据int len = reader.read(cs);System.out.println("读取的长度:"+len+"    读取的内容:"+ Arrays.toString(cs) + ",,,");//本次读取的字符的长度,如果要是文件中没有数据了,读取到的是-1len = reader.read(cs);System.out.println("第二次读取的长度:"+len+"    读取的内容:"+ Arrays.toString(cs) + ",,,");len = reader.read(cs);System.out.println("第三次读取的长度:"+len+"    读取的内容:"+ Arrays.toString(cs) + ",,,");} catch (Exception e) {e.printStackTrace();} finally {//关闭资源if(reader != null){try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}
}

练习一下:

2.4 复制文件

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.io.Writer;public class Test {public static void main(String[] args) {Reader reader = null;Writer writer = null;File file = new File("IO操作/ReaderDemo.java");File fileX = new File("IO操作/ReaderDemoX.java");// 写入文件try{// 读取reader = new FileReader(file);writer = new FileWriter(fileX);String str = "";char[] chars = new char[1024];int len = -1;while((len = reader.read(chars)) != -1){writer.write(chars, 0, len);}}catch(Exception e){e.printStackTrace();}finally{try{reader.close();writer.close();}catch(Exception e){e.printStackTrace();}}}
}

3. InputStream

InputStream是Java IO库中的一个重要抽象类,它用于从字节输入流中读取数据。以下是关于InputStream的详细解释:

基本概念:

  • InputStream是所有字节输入流的超类,用于读取诸如图像、视频、文本等各种类型的文件或其他数据源中的数据。
  • 它是一个抽象类,定义了读取字节数据的方法,但具体的实现依赖于它的子类。

常见实现类:

  • FileInputStream:从文件中读取数据。
  • ByteArrayInputStream:从字节数组中读取数据。
  • BufferedInputStream:提供缓冲功能,提高读取效率。
  • DataInputStream:用于读取Java的基本数据类型。

基本方法:

  • read():从输入流中读取下一个字节的数据,并以整数形式返回。如果已经达到流的末尾,则返回-1。
  • read(byte[] b):从输入流中读取一些字节的数据,并将其存储到指定的字节数组b中。返回实际读取的字节数。
  • read(byte[] b, int off, int len):从输入流中读取最多len个字节的数据,并将其存储到指定的字节数组b中,从偏移量off开始。返回实际读取的字节数。
  • skip(long n):跳过并丢弃输入流中的n个字节数据。返回实际跳过的字节数。
  • available():返回从此输入流中可以读取(或跳过)而不会阻塞的字节数的估计值。此方法通常返回0。
  • close():关闭输入流并释放与该流关联的系统资源。

注意事项:

  • 在使用完InputStream后,应该调用close()方法来关闭流并释放系统资源。可以使用try-with-resources语句来自动关闭流。
  • 在处理字节流时,需要特别注意字符编码问题。如果需要处理文本数据,可能需要结合使用InputStreamReader来将字节流转换为字符流。

举例:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class IOByteInputDemo {public static void main(String[] args) {InputStream in = null;try {//创建一个字节的数组byte[] bs = new byte[1024];//创建字符输入流的对象,如果有中文有可能出现乱码in = new FileInputStream("test.txt");//定义读取到的长度的标识int len = -1;while((len = in.read(bs)) != -1){String s = new String(bs, 0 , len);System.out.print(s);}} catch (Exception e) {e.printStackTrace();} finally {if(in != null){try {in.close();} catch (IOException e) {e.printStackTrace();}}}}
}

4. OutputStream

OutputStream 是 Java I/O 库中用于写入字节数据到目的地的抽象类。它定义了字节输出的基本方法,具体的实现细节则由它的子类来提供。以下是关于 OutputStream 的详细解释:

基本概念:

  • OutputStream 是所有字节输出流的超类。当你需要将字节数据写入文件、网络连接或其他输出设备时,你可以使用 OutputStream 或其子类。

常见实现类:

  • FileOutputStream:用于将数据写入文件。
  • ByteArrayOutputStream:将数据写入内存中的字节数组。
  • BufferedOutputStream:提供缓冲功能,以优化写入性能。
  • DataOutputStream:允许写入 Java 基本数据类型到输出流中。

基本方法:

  • write(int b):将指定的字节写入此输出流。
  • write(byte[] b):将 b.length 个字节从指定的字节数组写入此输出流。
  • write(byte[] b, int off, int len):从指定的字节数组写入 len 个字节,从偏移量 off 开始。
  • flush():刷新此输出流并强制写出任何被缓冲的输出字节。
  • close():关闭此输出流并释放与此流相关联的任何系统资源。

注意事项:

  • 在使用完 OutputStream 后,应该调用 close() 方法来关闭流并释放系统资源。可以使用 try-with-resources 语句来自动关闭流。
  • 当你使用 BufferedOutputStream 或其他具有缓冲的 OutputStream 子类时,即使你不显式调用 flush() 方法,在关闭流时(例如通过 try-with-resources 语句)也会自动刷新缓冲区。但是,在某些情况下,你可能希望显式地刷新缓冲区以确保数据被立即写出。
  • 在处理字节流时,如果源数据是文本,你可能需要考虑字符编码问题。如果需要将文本数据写入输出流,你可能需要结合使用 OutputStreamWriter 将字符流转换为字节流,并指定字符编码。

举例:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;public class IOByteDemo {public static void main(String[] args) {//创建字节输出流OutputStream out = null;try {out = new FileOutputStream(new File("test.txt"));//字节流不需要flushbyte[] bs = {97, 99, 108, 111};out.write(bs);// out.write(97);} catch (Exception e) {e.printStackTrace();} finally {try {if(out != null){out.close();}} catch (IOException e) {e.printStackTrace();}}}
}

5. 参考链接

【java】IO流-1(OutputStream和Writer)

相关文章:

字节流和字符流的相关知识

目录 1. Writer1.1 写两行数据1.2 换一种方式1.3 追加数据1.4 写很多数据&#xff0c;记得要清一下缓存1.5 用数组、字符串写入 2. Reader2.1 读个文件2.2 读取字符2.3 读取数据到数组2.4 复制文件 3. InputStream4. OutputStream5. 参考链接 1. Writer Writer类是Java.io包中…...

LLM意图识别器实践

利用 Ollama 和 LangChain 强化条件判断语句的智能提示分类 ❝ 本文译自Supercharging If-Statements With Prompt Classification Using Ollama and LangChain一文&#xff0c;以Lumos工具为例&#xff0c;讲解了博主在工程实践中&#xff0c;如何基于LangChain框架和本地LLM优…...

常见的反爬手段和解决思路(爬虫与反爬虫)

常见的反爬手段和解决思路&#xff08;爬虫与反爬虫&#xff09; 学习目标1 服务器反爬的原因2 服务器长反什么样的爬虫&#xff08;1&#xff09;十分低级的应届毕业生&#xff08;2&#xff09;十分低级的创业小公司&#xff08;3&#xff09;不小心写错了没人去停止的失控小…...

Stable Diffusion【真人模型】:人像光影摄影极限写实真实感大模型

大家好&#xff0c;我是极客菌 今天和大家分享一个基于SD1.5的真人大模型&#xff1a;人像光影摄影极限写实真实感大模型。 该模型具有以下特点&#xff1a; 真实肤感&#xff08;在面部肌理和皮肤肌理上均有加强学习&#xff0c;拒绝ai出图假的问题&#xff09; 永不脱妆&a…...

java实现图片添加水印

文章目录 前言一、工具类WatermarkUtil二、工具类介绍2.1 图片来源类型2.2 水印类型2.3 读取本地图片2.4 读取网络图片2.5 水印处理2.6 添加水印 三、测试添加水印总结 前言 给图片添加水印是一个很常见的需求&#xff0c;一般是用来防盗用。比如我们csdn上面写的文章中&#…...

CSS规则——font-face

font-face 什么是font-face&#xff1f; 想要让网页文字千变万化&#xff0c;仅靠font-family还不够&#xff0c;还要借助font-face&#xff08;是一个 CSS 规则&#xff0c;它允许你在网页上使用自定义字体&#xff0c;而不仅仅是用户系统中预装的字体。这意味着你可以通过提…...

【单片机毕业设计选题24034】-基于STM32的手机智能充电系统

系统功能: 系统可以设置充电时长&#xff0c;启动充电后按设置的充电时长充电&#xff0c;充电时间到后自动 停止充电&#xff0c;中途检测到温度过高也会结束充电并开启风扇和蜂鸣器报警。 系统上电后&#xff0c;OLED显示“欢迎使用智能充电系统请稍后”&#xff0c;两秒钟…...

[C++][数据结构][图][中][图的遍历][最小生成树]详细讲解

目录 1.图的遍历1.广度优先遍历2.深度优先遍历 2.最小生成树1.Kruskal算法2.Prim算法 1.图的遍历 给定一个图G和其中任意一个顶点 v 0 v_0 v0​&#xff0c;从 v 0 v_0 v0​出发&#xff0c;沿着图中各边访问图中的所有顶点&#xff0c;且每个顶 点仅被遍历一次 “遍历”&…...

退市新规解读—财务类强制退市

一、退市风险警示&#xff1a;第一年触及相关指标 上市公司最近一个会计年度触及下列退市风险指标之一&#xff0c;公司股票或存托凭证被实施退市风险警示(*ST)&#xff1a; 第1项 组合类财务指标 仅发行A股或B股&#xff0c;最近一个会计年度或追溯重述后最近一个会计年度 …...

小程序的生命周期使用方法和应用场景

小程序生命周期 初始化&#xff08;App Launch&#xff09; • 触发时机&#xff1a;小程序首次启动时。 • 主要事件&#xff1a;onLaunch。 • 功能与适用场景&#xff1a; • 全局数据初始化&#xff1a;设置应用的全局状态和变量。 • 登录状态检查&#xff1a;判断用户是…...

什么是C++模块化系统?C++20的模块化系统。

C20引入的模块化系统是一种新的代码组织和编译机制&#xff0c;它旨在替代传统的头文件机制&#xff0c;提供更好的代码组织、更快的编译速度和更强的封装性。模块化系统的主要目标包括&#xff1a; 减少编译时间&#xff1a;通过减少冗余的头文件解析和宏定义传播&#xff0c…...

智慧校园-档案管理系统总体概述

智慧校园档案管理系统&#xff0c;作为教育信息化进程中的重要一环&#xff0c;它运用现代信息技术的力量&#xff0c;彻底改变了传统档案管理的面貌&#xff0c;为学校档案资源的收集、整理、存储、检索与利用开辟了全新的途径。这一系统全面覆盖学生、教职工、教学科研及行政…...

文心一言 VS 讯飞星火 VS chatgpt (290)-- 算法导论21.3 3题

三、给出一个包含 m 个 MAKE-SET 、UNION 和 FINDSET 操作的序列(其中有 n 个是 MAKE-SET 操作)&#xff0c;当仅使用按秩合并时&#xff0c;需要 Ω(mlgn) 的时间。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在并查集&#xff08;Union-Find&#xff09;数…...

逻辑回归梯度推导

逻辑回归是一种广泛使用的分类算法&#xff0c;用于估计一个事件发生的概率。它是线性回归的扩展&#xff0c;通过sigmoid函数将线性回归的输出映射到[0, 1]区间&#xff0c;从而用于分类任务。 在逻辑回归中&#xff0c;我们使用对数似然损失函数&#xff08;log-likelihood l…...

Python 使用函数输出一个整数的逆序数

在Python中&#xff0c;你可以定义一个函数来输出一个整数的逆序数。这里有一个简单的实现方法&#xff1a; def reverse_integer(x):# 检查输入是否为整数if not isinstance(x, int):raise ValueError("Input must be an integer")# 将整数转换为字符串&#xff0c…...

【Linux】Wmware Esxi磁盘扩容

目录 一、概述 1.1 磁盘分区概念 1.2 LVM概念 二、扩容步骤 二、报错 一、概述 1.1 磁盘分区概念 在 Linux 中&#xff0c;每一个硬件设备都映射到一个系统的文件&#xff0c;对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux把各种 IDE 设备分配了一个由 hd 前缀组成的文…...

树莓派4B_OpenCv学习笔记15:OpenCv定位物体实时坐标

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习 OpenCv定位物体实时位置&#xff0c;代码来源是…...

MySQL之如何定位慢查询

1、如何定位慢查询 1.1、使用开源工具 调试工具&#xff1a;Arthas 运维工具&#xff1a;Promethuss、Skywalking 1.2、MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数&#xff08;long_query_time&#xff0c;单位&#xff1a;秒&#xff0c;默认10秒&#x…...

Open3D 删除点云中重复的点

目录 一、算法原理1、重叠点2、主要函数二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、重叠点 原始点云克隆一份   构造重叠区域   合并点云获得重叠点 2、主要…...

填报志愿选专业是兴趣重要还是前景重要?

进行专业评估&#xff0c;找到一个适合自己的专业是一件非常困难的事情。在进行专业选择时&#xff0c;身上理想化色彩非常严重的人&#xff0c;会全然不顾及他人的劝阻&#xff0c;义无反顾的以兴趣为主&#xff0c;选择自己热爱的专业。一些较多考虑他人建议&#xff0c;能听…...

python开发基础——day9 函数基础与函数参数

一、初识函数(function) 编程函数!数学函数&#xff0c;里面的是逻辑&#xff0c;功能&#xff0c;而不是套公式 编程函数的作用实现特定操作的一段代码 你现在请客&#xff0c;每个人都点同样的一份吃的&#xff0c;请100个人 1.薯条 2.上校鸡块 3.可乐 那…...

STM32——使用TIM输出比较产生PWM波形控制舵机转角

一、输出比较简介&#xff1a; 只有高级定时器和通用寄存器才有输入捕获/输出比较电路&#xff0c;他们有四个CCR&#xff08;捕获/比较寄存器&#xff09;&#xff0c;共用一个CNT&#xff08;计数器&#xff09;&#xff0c;而输出比较功能是用来输出PWM波形的。 红圈部分…...

第十五章 集合(set)(Python)

文章目录 前言一、集合 前言 集合&#xff08;set&#xff09;是一个无序的不重复元素序列。 一、集合 set {1, 2, 3, 4}...

面试-javaIO机制

1.BIO BIO&#xff1a;是传统的javaIO以及部分java.net下部分接口和类。例如&#xff0c;socket,http等&#xff0c;因为网络通信同样是IO行为。传统IO基于字节流和字符流进行操作。提供了我们最熟悉的IO功能&#xff0c;譬如基于字节流的InputStream 和OutputStream.基于字符流…...

在.NET Core中,config和ConfigureServices的区别和作用

在.NET Core中&#xff0c;config和ConfigureServices是两个不同的概念&#xff0c;它们在应用程序的启动和配置过程中扮演着不同的角色。 ConfigureServices&#xff1a;这是ASP.NET Core应用程序中的一个方法&#xff0c;位于Startup类的内部。它的作用是配置依赖注入(DI)容器…...

App Inventor 2 如何实现多个定时功能?

1、可以使用多个“计时器”组件。 2、也可以用一个计时器&#xff0c;定时一分钟。也就是一分钟就会触发一次事件执行&#xff0c;定义一个全局数字变量&#xff0c;在事件中递增&#xff0c;用逻辑判断这个变量的值即可完成多个想要定时的任务(о∀о) 代码块请参考&#xf…...

技术驱动的音乐变革:AI带来的产业重塑

&#x1f4d1;引言 近一个月来&#xff0c;随着几款音乐大模型的轮番上线&#xff0c;AI在音乐产业的角色迅速扩大。这些模型不仅将音乐创作的门槛降至前所未有的低点&#xff0c;还引发了一场关于AI是否会彻底颠覆音乐行业的激烈讨论。从初期的兴奋到现在的理性审视&#xff0…...

重生之我要学后端0--HTTP协议和RESTful APIs

http和RESTful APIs HTTP协议RESTful APIs设计RESTful API设计实例 HTTP协议 HTTP&#xff08;超文本传输协议&#xff09;是用于分布式、协作式和超媒体信息系统的应用层协议。它是网页数据通讯的基础。工作原理简述如下&#xff1a; 客户端请求&#xff08;Request&#xf…...

深度之眼(二十八)——神经网络基础知识(三)-卷积神经网络

文章目录 一、前言二、卷积操作2.1 填充&#xff08;padding&#xff09;2.2 步长2.3 输出特征图尺寸计算2.4 多通道卷积 三、池化操作四、Lenet-5及CNN结构进化史4.1 Lenet-5 一、前言 卷积神经网络–AlexNet(最牛)-2012 Lenet-5-大规模商用&#xff08;1989&#xff09; 二、…...

AI Infra简单记录

向量数据库的作用 1. 在AI大模型训练过程中&#xff0c;向量数据库可以有效提升数据检索、特征提取等任务的效率。 2、在AI大模型推理过程中&#xff0c;向量数据库为大模型提供外挂知识库&#xff0c;提升模型时效性与准确性&#xff0c;提供缓存能力&#xff0c;减少调用开…...