mysql数据存储问题

news2024/12/28 5:12:25

目录

MySQL数据存储基础

MySQL数据存放位置

InnoDB存储引擎介绍

Mermaid图表:InnoDB存储引擎数据文件结构

表空间结构详解

组成要素

组织方式

页内组织

性能影响

Mermaid图表:表空间的层次化结构和页内组织

InnoDB行格式详解

行格式类型

Compact行格式详解

Mermaid图表:Compact行格式结构

变长字段和NULL值处理

变长字段长度列表

NULL值列表

Mermaid图表:变长字段和NULL值列表的存储逻辑

记录头信息详解

记录的组织方式:链表

记录状态

其他记录头信息

隐含字段

Mermaid图表:记录头信息结构

特殊字段处理:VARCHAR(n) 字段大小限制

大小限制处理

单字段情况下的VARCHAR(n)最大长度计算

多字段情况下的VARCHAR(n)最大长度计算

示例

Mermaid图表:VARCHAR(n) 字段大小限制处理

行溢出处理

行溢出的条件

行溢出的处理机制

不同行格式对行溢出的处理差异

Mermaid图表:行溢出处理机制

页与内存交互

页作为数据库与内存交互的基本单位

页的大小与作用

Mermaid图表:页与内存交互过程


MySQL数据存储基础

MySQL数据存放位置

MySQL的数据存储主要依赖于文件系统,数据文件的存放位置由配置文件中的datadir参数指定。每个数据库(Database)在datadir下创建一个以其名称命名的目录,例如/var/lib/mysql/mydatabase。在这个目录中,存储了该数据库的所有表结构和数据文件。

  • 数据目录(datadir): 这是MySQL数据文件存放的基础目录,通常在MySQL的配置文件my.cnfmy.ini中设置。

  • 表空间文件: 对于InnoDB存储引擎,表数据和索引通常存储在.ibd文件中,每个表可能有独立的表空间文件,文件名通常为table_name.ibd

InnoDB存储引擎介绍

InnoDB是MySQL的默认存储引擎,广泛用于需要事务支持和外键约束的场景。它提供了以下特性:

  • ACID事务: 保证了事务的原子性、一致性、隔离性和持久性。

  • 行级锁定: 提高了并发性能,只在修改行上加锁。

  • MVCC(多版本并发控制): 允许在不锁定资源的情况下读取数据,提高了读取性能。

InnoDB存储引擎的数据文件结构如下:

  • 系统表空间: 包含所有的表数据和索引,通常以ibdata1命名。

  • 独立表空间: 由innodb_file_per_table参数控制,每个表的数据和索引存储在独立的文件中,提高了空间管理的灵活性。

Mermaid图表:InnoDB存储引擎数据文件结构

这个Mermaid图表展示了InnoDB存储引擎的数据文件结构,其中系统表空间和独立表空间是两种主要的数据存储方式。

表空间结构详解

表空间(Tablespace)是InnoDB存储引擎中用于逻辑地组织和存储数据的概念。它通过一系列层次化的组件来优化数据的存储效率和访问速度。

组成要素
  1. 段(Segment):

    1. 表空间由多个段组成,每个段是数据的逻辑容器。

    2. 常见的段类型包括索引段(存储B+树索引的非叶子节点)和数据段(存储行数据)。

  2. 区(Extent):

    1. 区是段内由连续页组成的单元,每个区通常大小为1MB。

    2. 区的设计允许InnoDB引擎以连续的空间存储数据,减少磁盘寻址时间。

  3. 页(Page):

    1. 页是InnoDB存储引擎的基本存储单元,每个页默认大小为16KB。

    2. 页内可以存储多条行记录或索引数据,是实际数据存储的地方。

  4. 行(Row):

    1. 行是页内存储的数据记录,每条记录根据其数据类型和长度有不同的存储方式。

组织方式

表空间的组织方式具有以下特点:

  • 层次化存储: 数据通过段、区、页的层次化结构进行存储,每一层都服务于不同的目的和优化。

  • 连续性优化: 通过区的使用,InnoDB能够将数据存储在物理上连续的页中,这有助于提高I/O效率。

  • 灵活的行存储: 行记录根据其大小和类型存储在页内,如果一行数据过大,可能会发生行溢出,即数据被存储在多个页中。

页内组织
  • 每个页可以存储多条行记录,行记录按照它们在页内的插入顺序进行组织。

  • 页内还包含一些控制信息,如页头、页目录和页尾,这些信息帮助管理页内的数据。

性能影响
  • 表空间的结构对数据库的性能有直接影响。例如,区的使用可以减少磁盘随机I/O操作,而页的大小直接影响每次I/O操作可以读取的数据量。

Mermaid图表:表空间的层次化结构和页内组织

mysql数据存储问题这个Mermaid图表详细展示了表空间的层次化结构,以及页内如何组织行记录和控制信息。通过这种结构,InnoDB存储引擎能够高效地管理大量数据,并提供快速的数据访问能力。

InnoDB行格式详解

InnoDB存储引擎提供了多种行格式,以适应不同的存储需求和优化性能。每种行格式都有其特定的结构和特点。

行格式类型
  1. Redundant: 这是MySQL早期版本使用的行格式,现在已不推荐使用,因为它会占用更多的存储空间。

  2. Compact: 这种格式旨在节省空间,是MySQL 5.1版本之后默认的行格式。

  3. Dynamic: 动态行格式适用于有大量变长字段的表,提供了更灵活的存储方式。

  4. Compressed: 压缩行格式使用 zlib 压缩库来减少数据的存储大小。

Compact行格式详解

Compact行格式是当前默认的行格式,它通过以下方式组织数据:

  1. 记录的额外信息:

    1. 变长字段长度列表: 对于变长字段(如VARCHARVARBINARY等),存储实际占用的字节数。

    2. NULL值列表: 如果表定义中字段可以为NULL,使用位图来标记哪些字段的值为NULL。

  2. 记录头信息:

    1. 包含行的状态信息,如是否被删除、记录的类型等。

  3. 记录的真实数据:

    1. 存储字段数据,包括显式字段和隐含字段。

    2. 显式字段是用户定义的列数据。

    3. 隐含字段是InnoDB自动添加的,包括:

      • row_id: 如果表没有定义主键或唯一非空索引,InnoDB使用隐藏的自增字段row_id

      • trx_id: 事务ID,标识生成该行记录的事务。

      • roll_pointer: 回滚指针,用于事务的多版本并发控制(MVCC)。

Mermaid图表:Compact行格式结构

这个Mermaid图表展示了Compact行格式的结构,包括记录的额外信息和真实数据的组成部分。通过这种结构,InnoDB能够有效地存储和管理行数据,同时提供对事务和并发控制的支持。

变长字段和NULL值处理

在InnoDB的Compact和Dynamic行格式中,变长字段和NULL值的处理对存储效率和数据访问速度有重要影响。

变长字段长度列表

作用:

  • 变长字段(如VARCHARVARBINARY等)在存储时,其长度是可变的。变长字段长度列表用于记录每个变长字段实际占用的字节数。

存储方式:

  • 对于每个变长字段,InnoDB会根据其实际长度分配相应的字节来存储长度信息。

  • 如果变长字段的最大长度小于或等于255字节,使用1字节来存储长度。

  • 如果变长字段的最大长度大于255字节,使用2字节来存储长度。

优化:

  • 变长字段长度列表通常存储在记录的开始部分,这样在读取记录时可以快速确定每个变长字段的大小。

NULL值列表

存储逻辑:

  • 如果表中的字段定义允许NULL值,InnoDB使用NULL值列表来记录哪些字段的值为NULL。

位图表示:

  • NULL值列表是一个位图,每个字段对应位图中的一个位。如果位的值为1,则表示该字段的值为NULL;如果为0,则表示有具体值。

存储效率:

  • 使用位图表示NULL值可以节省空间,特别是当表中有大量可以为NULL的字段时。

特殊情况:

  • 如果表中所有字段都定义为NOT NULL,NULL值列表将不会被包含在行格式中,从而节省存储空间。

Mermaid图表:变长字段和NULL值列表的存储逻辑

图表展示了变长字段长度列表的存储方式和NULL值列表的存储逻辑。通过这种方式,InnoDB行格式能够有效地处理变长字段和NULL值,同时保持存储的紧凑性和访问的高效性。

记录头信息详解

记录头信息是InnoDB行格式中的重要组成部分,它包含了记录的元数据和状态信息,对于数据库的事务处理和数据访问至关重要。

记录的组织方式:链表

InnoDB使用链表来组织记录,每个记录头信息中包含指向下一条记录的指针。这种链表结构使得InnoDB能够高效地进行以下操作:

  • 插入: 新记录可以快速地插入到链表的适当位置。

  • 删除: 删除操作可以通过修改记录头信息中的delete_mask来标记记录为删除状态,而不需要立即从磁盘上移除记录。

  • 更新: 当记录更新时,如果新数据导致记录大小变化,可能需要将记录移动到新的位置。

记录状态

记录头信息中的状态字段包括但不限于:

  • delete_mask: 用于标记记录是否被删除。如果一个记录被删除,delete_mask将被设置,但实际上记录的数据仍然保留在页中,直到被垃圾收集器清理。

  • record_type: 指示记录的类型。不同的值代表不同类型的记录,例如:

    • 0 表示普通记录。

    • 1 表示B+树非叶子节点记录。

    • 2 表示最小记录,用于索引。

    • 3 表示最大记录,用于索引。

其他记录头信息

除了上述状态信息,记录头还包含:

  • next_record: 下一条记录的地址,用于实现链表的物理连接。

  • heap_number: 记录在堆中的序号,用于在二级索引中快速定位记录。

隐含字段

记录头信息中还包括对隐含字段的引用,如:

  • row_id: 如果表没有主键或唯一索引,InnoDB会使用内部的自增row_id作为隐含的主键。

  • trx_id: 记录创建或最后修改该记录的事务ID。

  • roll_pointer: 回滚指针,用于MVCC和事务的回滚操作。

Mermaid图表:记录头信息结构

这个Mermaid图表展示了记录头信息的结构,包括记录的组织方式、状态信息和隐含字段。这些信息对于InnoDB存储引擎的高效数据管理和事务处理至关重要。

特殊字段处理:VARCHAR(n) 字段大小限制

VARCHAR(n) 字段在InnoDB中具有特殊的处理方式,因为它是一个变长字段,其实际存储长度取决于存储的数据。

大小限制处理
  1. 最大长度限制:

    1. VARCHAR(n) 字段的最大长度n受到表的行大小限制影响。一行数据的大小(包括所有的字段和额外的存储开销)不能超过65535字节。

  2. 存储开销:

    1. 行的大小限制包括了变长字段长度列表和NULL值列表的存储开销。

  3. 变长字段长度列表:

    1. 对于VARCHAR字段,InnoDB需要额外的字节来存储字段的实际长度。如果字段长度小于或等于255字节,使用1字节存储;如果超过255字节,则使用2字节存储。

  4. NULL值列表:

    1. 如果表中有字段可以为NULL,InnoDB会使用一个位图(NULL值列表)来标记哪些字段是NULL,这占用了额外的空间。

单字段情况下的VARCHAR(n)最大长度计算
  • 当表中只有一个VARCHAR字段时,最大长度n可以通过以下公式计算得出: nmax=65535−(存储开销)nmax=65535−(存储开销) 其中存储开销包括变长字段长度列表和NULL值列表的字节数。

多字段情况下的VARCHAR(n)最大长度计算
  • 当表中有多个字段,包括VARCHAR和其他类型字段时,需要考虑所有字段的总大小和存储开销。VARCHAR字段的最大长度n需要保证整个行的大小不超过65535字节。

示例
  • 假设一个表只有一个VARCHAR字段,并且该字段允许为NULL。在这种情况下,行的存储开销包括1字节的NULL值列表和2字节的变长字段长度列表(假设VARCHAR字段长度超过255字节): nmax=65535−2−1=65532nmax=65535−2−1=65532 这意味着在这种情况下,VARCHAR字段的最大长度可以是65532字节。

Mermaid图表:VARCHAR(n) 字段大小限制处理

这个Mermaid图表展示了VARCHAR(n)字段大小限制的处理方式,包括单字段和多字段情况下的最大长度计算方法。这种处理确保了VARCHAR字段在InnoDB中的高效存储和灵活使用。

行溢出处理

在InnoDB存储引擎中,当一行数据的大小超过了页的大小限制时,就会发生行溢出。这种情况需要特殊的处理机制来确保数据的完整性和访问效率。

行溢出的条件
  • 当一行记录的大小超过页的允许大小(通常是16KB)时,该行就会发生溢出。

  • 溢出通常发生在VARCHARTEXTBLOB等大字段上,尤其是当这些字段的值较大时。

行溢出的处理机制
  1. 溢出页(Overflow Page):

    1. 超出一页大小的数据会被存储在额外的溢出页中。

    2. 这些溢出页通过指针与原始记录页相连。

  2. 记录头信息:

    1. 在记录头信息中,会有指向溢出页的指针,以便能够找到溢出的数据。

  3. 数据存储:

    1. 对于Compact和Dynamic行格式,行溢出时,原始页中会保留一部分数据,而其余数据存储在溢出页中。

    2. 对于Compressed行格式,行溢出时,原始页中不保留数据,所有溢出数据都存储在溢出页中。

不同行格式对行溢出的处理差异
  • Compact和Dynamic行格式:

    • 行溢出时,原始记录页保留数据的前768字节,其余数据存储在溢出页中。

    • 这种处理方式允许在不访问溢出页的情况下快速访问行的前768字节。

  • Compressed行格式:

    • 行溢出时,原始记录页不保留任何数据,而是使用20字节的指针指向溢出页。

    • 这种处理方式减少了原始记录页的使用,但访问溢出数据时需要额外的I/O操作。

Mermaid图表:行溢出处理机制

这个Mermaid图表展示了行溢出的条件和处理机制,以及不同行格式对行溢出处理的差异。通过这种机制,InnoDB能够高效地处理大型数据字段,同时保持数据访问的性能。

页与内存交互

在数据库系统中,页是数据存储和内存交互的基本单位,对于InnoDB存储引擎来说,页的使用至关重要。

页作为数据库与内存交互的基本单位
  1. 数据分页存储:

    1. 数据库将数据分页存储,每页固定大小,通常是16KB,这个大小远大于操作系统的内存页大小,这样做可以减少I/O操作的次数。

  2. 内存页缓存:

    1. 数据库管理系统(DBMS)会在内存中缓存一部分页,以加速数据访问。当查询涉及到某页的数据时,如果该页已经在内存中,则可以直接从内存中读取,否则需要从磁盘中加载。

  3. 页的加载与卸载:

    1. 当内存中的页缓存满了之后,DBMS会根据特定的算法(如LRU算法)来决定哪些页应该被卸载到磁盘,哪些页应该保留在内存中。

页的大小与作用
  1. 页的大小:

    1. InnoDB的页大小默认是16KB,这个大小是经过优化的,以适应现代硬件的块设备和文件系统。

  2. 页的作用:

    1. 页作为数据访问的基本单位,可以存储多条行记录或B+树的多个节点。

    2. 页的大小直接影响到I/O效率,较大的页可以减少访问单条记录所需的I/O次数,但可能会造成空间的浪费。

  3. 页的组成:

    1. 每个页包含页头、页目录、行记录、页尾等部分。页头包含页的元数据,页目录用于快速定位到页内的特定行,页尾包含页的状态信息。

  4. 页的I/O操作:

    1. 数据库的读取(Read)和写入(Write)操作通常以页为单位进行,这样可以减少磁盘I/O的次数,提高性能。

Mermaid图表:页与内存交互过程

这个Mermaid图表展示了页作为数据库与内存交互的基本单位的过程,以及页的大小和作用。通过这种方式,InnoDB能够有效地管理数据的存储和访问,优化性能。

总结

1. MySQL NULL值存放方式
  • NULL值列表: 在InnoDB的Compact和Dynamic行格式中,如果表结构允许字段包含NULL值,InnoDB会使用一个NULL值列表(位图)来记录哪些字段是NULL。这个列表是按列的逆序排列的,每个位对应一个字段,1表示NULL,0表示非NULL。

  • 空间节省: 当表中的所有字段都设置为NOT NULL时,NULL值列表不会被包含在行格式中,从而节省存储空间。

2. VARCHAR字段大小计算方法
  • 最大长度限制: VARCHAR(n)字段的大小受限于行的大小限制,即一行数据的最大字节数为65535字节。

  • 存储开销: 这个最大长度包括了变长字段长度列表和NULL值列表的存储开销。变长字段长度列表的存储取决于字段实际使用的最大长度,而NULL值列表至少占用1字节。

  • 计算公式: 对于允许为NULL的VARCHAR字段,其最大长度n的计算公式是: nmax=65535−(变长字段长度列表字节数+NULL值列表字节数)nmax=65535−(变长字段长度列表字节数+NULL值列表字节数)

  • 字符集影响: 字符集的不同会影响每个字符所占用的字节数,进而影响VARCHAR字段的最大长度。

3. 行溢出后MySQL的处理策略
  • 溢出页: 当一行数据的大小超过页的大小限制时,超出部分会被存储在额外的溢出页中。

  • 不同行格式的处理:

    • Compact和Dynamic: 行的前768字节(如果足够容纳)保留在原始页中,其余部分存储在溢出页。

    • Compressed: 行的所有数据(除了指针)存储在溢出页中,原始页仅包含指向溢出数据的20字节指针。

  • 性能考虑: 行溢出会增加访问数据所需的I/O操作次数,因为需要从不同的页读取数据。

Mermaid图表:MySQL行存储策略总结

这个Mermaid图表总结了MySQL中NULL值的存放方式、VARCHAR字段大小的计算方法,以及行溢出后的处理策略。这些策略共同确保了数据的有效存储和高效访问。

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

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

相关文章

Linux 操作系统:基于环形队列的生产者消费者模型

Linux 操作系统:基于环形队列的生产者消费者模型 一、前言二、大致框架二、P操作、V操作三、生产者生产数据四、生产者获取数据五、代码测试六、所有代码 一、前言 环形队列采用数组模拟,用模运算来模拟环状特性。和基于阻塞队列的生产者消费者模型不同的…

WPF篇(11)-ToolTip控件(提示工具)+Popup弹出窗口

ToolTip控件 ToolTip控件继承于ContentControl,它不能有逻辑或视觉父级,意思是说它不能以控件的形式实例化,它必须依附于某个控件。因为它的功能被设计成提示信息,当鼠标移动到某个控件上方时,悬停一会儿,…

【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等)

【云存储】SDS软件定义存储,数据存储的类型与技术方案(块/文件/对象,Ceph、RBD等) 文章目录 1、分布式存储架构(软件定义存储SDS,超融合基础架构HCI)2、存储类型(块存储,…

SQL面试题练习 —— 用户行为路径分析

目录 1 题目2 建表语句3 题解 题目来源:拼多多。 1 题目 有一张用户行为日志表 ods_usr_log, 包含用户id(user_id)和页面id(page_id)以及进入页面时间(in_ts) 问题:统计每天进入A页…

【SpringMVC】SpringMVC实现文件上传和下载

目录 1.文件上传 2.文件下载 1.文件上传 大概的图如下所示: 客户端: 文件上传就是把客户端的文件上传到服务端进行保存。在文件上传时文件和其他请求参数是在 请求体中进行传递。所以不支持 GET 类型请求。实现文件上传,需要提供一个上传的…

状态压缩动态规划——状压dp

状压dp:意思是将状态进行压缩,从而更容易地写出状态转移方程 通常做法:将每个状态(一个集合)用二进制表示,每个位的1就代表着这个编号的元素存在,0就代表着这个编号的元素不存在,如…

【Python】练习题附带答案

1、使用for循环实现输出9*9乘法表 代码: 2、写代码实现累乘计算器。 示例:用户输入:5*9*87输出答案:3915 代码: 3、写代码实现,循环提示用户输入的内容(Q/q终止循环),…

黑马Java零基础视频教程精华部分_18_Arrays各种方法

系列文章目录 文章目录 系列文章目录Arrays简介Arrays各种方法toString代码示例binarySearch代码示例copyOf代码示例copyOfRange和fill代码示例sort代码示例 Arrays简介 操作数组的工具类。 Arrays各种方法 toString代码示例 int[]arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //to…

单片机IO灌入5V电压导致其他IO电压测量到大于供电电压问题

最近用GD32F103RCT6做项目,用了3个485收发器,都是直接接在单片机IO上的。 485收发器是5V供电的,这个时候就出现5V电平和3.3V电平兼容的问题了。 一开始只用了PA10、PC11这两个串口,他俩是兼容5V的,从手册可以看出IO最…

图片加水印,前端的方式

图片实现水印的方式&#xff0c;面试其实也是会被问到的&#xff0c;实现的原理就是通过canvas把图片绘制出来&#xff0c;同时在上面绘制出文字就可以了 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta…

C++ | Leetcode C++题解之第327题区间和的个数

题目&#xff1a; 题解&#xff1a; class BalancedTree { private:struct BalancedNode {long long val;long long seed;int count;int size;BalancedNode* left;BalancedNode* right;BalancedNode(long long _val, long long _seed): val(_val), seed(_seed), count(1), siz…

Kubernetes节点上线和下线、Kubernetes高可用集群搭建上、Kubernetes高可用集群搭建中和Kubernetes高可用集群搭建下

一、Kubernetes节点上线和下线 1.新节点上线 1&#xff09;准备工作 关闭防火墙firewalld、selinux 设置主机名 设置/etc/hosts 关闭swap swapoff -a 永久关闭&#xff0c;vi /etc/fstab 注释掉swap那行 将桥接的ipv4流量传递到iptables链 modprobe br_netfilter ##生成brid…

YOLO系列:从yolov1至yolov8的进阶之路 持续更新中

一、基本概念 1.YOLO简介 YOLO&#xff08;You Only Look Once&#xff09;&#xff1a;是一种基于深度神经网络的对象识别和定位算法&#xff0c;其最大的特点是运行速度很快&#xff0c;可以用于实时系统。 2.目标检测算法 RCNN&#xff1a;该系列算法实现主要为两个步骤&…

WPF篇(4)- VirtualizingStackPanel (虚拟化元素)+Canvas控件(绝对布局)

VirtualizingStackPanel虚拟化元素 VirtualizingStackPanel 类&#xff08;虚拟化元素&#xff09;和StackPanel 类在用法上几乎差不多。其作用是在水平或垂直的一行中排列并显示内容。它继承于一个叫VirtualizingPanel的抽象类&#xff0c;而这个VirtualizingPanel抽象类继承…

[BSidesCF 2019]Kookie1

打开题目&#xff0c;看到 根据提示&#xff0c;账号&#xff1a;cookie。密码&#xff1a;monster。试一下登录&#xff0c;登陆成功 抓包看看信息 根据提示&#xff0c; 看一下返回包 账号要加username要改成admin&#xff0c;改一下试试 构造cookie 直接得到flag flag{c…

Animate软件基本概念:缓动、绘图纸外观及图层

FlashASer&#xff1a;AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer&#xff1a;实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer&#xff1a;Animate教程及作品源文件https://zhuanlan.zhihu.co…

【秋招突围】2024届秋招-京东笔试题-第二套

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍭 本次给大家…

LVS(Linux Virtual Server)

简介 LVS&#xff08;Linux Virtual Server&#xff09;是一个高性能的开源负载均衡解决方案&#xff0c;它通过在Linux内核中实现IPVS&#xff08;IP Virtual Server&#xff09;模块来提供负载均衡功能。LVS能够将外部请求根据特定的算法分发到后端的多个服务器上&#xff0c…

Java 中的打印流

打印流属于输出流&#xff0c;分为字节打印流和字符打印流。 字节打印流 构造方法 这么多个构造方法&#xff0c;不要求记住&#xff0c;知道怎么用就可以了。 字节流底层是没有缓冲区&#xff0c;开不开自动刷新都一样。 听老司机说 工作3年了 一个流都没用过。所以听下有…

maven配置 + IDEA集成自己配置的maven

去官网下载 解压出来&#xff0c;去 conf 配置本地仓库 要是没梯子&#xff0c;国外服务器还是慢的&#xff0c;参考下面的maven的架构图 &#xff0c;就不用去国外的中央仓库了&#xff0c;配置到去阿里云的私服。 <mirror><id>alimaven</id><name>a…