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

黑马Java——IO流

一、IO流的概述

IO流:存储和读取数据的解决方案

IO流和File是息息相关的 

 

1、IO流的分类

1.1、纯文本文件

word、Excel不是纯文本文件

而txt或者md文件是纯文本文件

2、小结

二、IO流的体系结构

三、字节流

1、FileOutputStream(字节输出流)

代码

结果

2、FileOutputStream写出数据的细节

 

3、FileOutputStream写数据的3种方式

 

3.1、一次写一个字节数据

3.2、一次写一个字节数组数据

3.3、一次写一个字节数组的部分数据

 

4、FileOutputStream写数据的两个小问题

4.1、换行写

 

4.2、续写

5、小结

6、FileInputStream(字节输入流)

 示例代码

7、FileInputStream书写细节

 

8、FileInputStream的循环读取

 

细节误区:

9、文件拷贝

9.1、文件拷贝的基本代码

 课堂练习:要求统计一下拷贝时间,单位毫秒 

 

9.2、文件拷贝的弊端

9.3、文件拷贝弊端的解决方案(一次读多个字节)

示例代码:

改进方法:

 

9.4、文件拷贝代码改写

10、IO流中不同JDK版本捕获异常的方式

示例代码

简化方案:(了解即可)

代码实现:(但在实际开发中几乎所有的异常都是抛出处理的) 

JDK7

JDK9

四、字符集

1、ASCII字符集(0-127)

1.1、计算机的存储规则(英文)

编码:

解码:

2、GBK字符集

主要掌握

2.1、计算机的存储规则(英文)(GBK)

2.2、计算机的存储规则(汉字)(GBK)

高位字节二进制一定以1开头,是为了和英文做出区分

解码:(直接转成十进制即可)

 

3.3、小结

核心1: GBK中,一个英文字母一个字节,二进制第一位是0
核心2: GBK中,一个中文汉字两个字节,二进制第一位是1

3、Unicode字符集

 

 为了减少浪费,那么就有了UTF-8编码规则:

 

 

3.1、UTF-8是一个字符集吗?

 不是,UTF-8只是Unicode字符集的一种编码方式

3.2、Unicode字符集练习

 

3.3、小结

五、为什么会有乱码?

 

 

1、如何不产生乱码?

2、扩展

因为拷贝的时候是一个字节一个字节拷贝的,数据没有出现丢失,那么只要记事本打开的字符集和编码方式也和数据源保持一致,就不会出现乱码。 

3、Java中的编解码方法

六、字符流

1、字符流的体系架构

2、FileReader(字符输入流)

2.1、创建字符输入流对象

 

//1.创建对象并关联本地文件FileReader fr = new FileReader("myio\\a.txt");

2.2、读取数据

 示例代码:(空参的read方法)

 

示例代码(带参的read方法)

//read(chars):读取数据,解码,强转三步合并了,把强转之后的字符放到数组当中
//空参的read + 强转类型转换

2.3、释放资源

 示例代码:

3、FileWriter(字符输出流)

3.1、构造方法

3.2、成员方法

3.3、FileWriter书写细节

4、字符输出流写出数据

4.1、write(int c):写出一个字符

示例代码:(字节流,每次只能操作一个字节)

4.2、write(String str):写出一个字符串

4.3、write(char[] cbuf):写出一个字符数组

5、字符流原理解析

5.1、字符输入流(FileReader)的原理解析

 

示例代码:(底层揭秘)

Ⅰ、创建字符输入流对象

Ⅱ、读取数据

扩展:

5.2、字符输出流(FileWriter)的原理解析

数据会先写到缓冲区中

 

 示例代码:(当出现字节数组装满了、被刷新、被关闭三种任意一种时,字节数组中的数据都会被写入到文件当中)

七、综合练习

1、字节流和字符流的使用场景

2、练习一:拷贝(字节流)

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Test01 {public static void main(String[] args) throws IOException {//拷贝一个文件夹,考虑子文件夹//1.创建对象表示数据源File src = new File("D:\\aaa\\src");//2.创建对象表示目的地File dest = new File("D:\\aaa\\dest");//3.调用方法开始拷贝copydir(src,dest);}/** 作用:拷贝文件夹* 参数一:数据源* 参数二:目的地** */private static void copydir(File src, File dest) throws IOException {dest.mkdirs();//递归//1.进入数据源File[] files = src.listFiles();//2.遍历数组for (File file : files) {if(file.isFile()){//3.判断文件,拷贝FileInputStream fis = new FileInputStream(file);FileOutputStream fos = new FileOutputStream(new File(dest,file.getName()));byte[] bytes = new byte[1024];int len;while((len = fis.read(bytes)) != -1){fos.write(bytes,0,len);}fos.close();fis.close();}else {//4.判断文件夹,递归copydir(file, new File(dest,file.getName()));}}}
}

 

 

3、练习二:文件加密

 小知识:如果一个数字它异或另外一个数字两次,那么它得到的数字就是它本身

^ : 异或两边相同:false两边不同:true

加密:

 

解密:

 4、练习三:修改文件中的数据

细节1:文件中的数据不要换行细节2:bom头

在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码。其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。

示例代码:(常规写法)

//1.读取数据FileReader fr = new FileReader("myio\\a.txt");StringBuilder sb = new StringBuilder();int ch;while((ch = fr.read()) != -1){sb.append((char)ch);}fr.close();System.out.println(sb);//2.排序String str = sb.toString();String[] arrStr = str.split("-");//2-1-9-4-7-8ArrayList<Integer> list = new ArrayList<>();for (String s : arrStr) {int i = Integer.parseInt(s);list.add(i);}Collections.sort(list);System.out.println(list);//3.写出FileWriter fw = new FileWriter("myio\\a.txt");for (int i = 0; i < list.size(); i++) {if(i == list.size() - 1){fw.write(list.get(i) + "");}else{fw.write(list.get(i) + "-");}}fw.close();

 示例代码:(非常规写法—Stream && 方法引用)

//1.读取数据FileReader fr = new FileReader("myio\\a.txt");StringBuilder sb = new StringBuilder();int ch;while((ch = fr.read()) != -1){sb.append((char)ch);}fr.close();System.out.println(sb);//2.排序Integer[] arr = Arrays.stream(sb.toString().split("-")).map(Integer::parseInt).sorted().toArray(Integer[]::new);//3.写出FileWriter fw = new FileWriter("myio\\a.txt");String s = Arrays.toString(arr).replace(", ","-");String result = s.substring(1, s.length() - 1);fw.write(result);fw.close();

八、IO流体系中的高级流

1、缓冲流

1.1、字节缓冲流

缓冲流是一个高级流,是对基本流的一个包装 

 

利用字节缓冲流拷贝文件:(示例代码) 

需求:
*       利用字节缓冲流拷贝文件
*
*   字节缓冲输入流的构造方法:
*           public BufferedInputStream(InputStream is)
*
*    字节缓冲输出流的构造方法:
*           public BufferedOutputStream(OutputStream os)

 默认缓冲区都是8192,基本流的关闭在底层会自动执行

//1.创建缓冲流的对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myio\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\a.txt"));//2.循环读取并写到目的地int b;while ((b = bis.read()) != -1) {bos.write(b);}//3.释放资源bos.close();bis.close();

利用字节缓冲流拷贝文件:(一次读写多个字节) 

 //1.创建缓冲流的对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myio\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\copy2.txt"));//2.拷贝(一次读写多个字节)byte[] bytes = new byte[1024];int len;while((len = bis.read(bytes)) != -1){bos.write(bytes,0,len);}//3.释放资源bos.close();bis.close();

1.2、字节缓冲流提高效率的原理

倒手的过程是在内存中发生的,而内存的速度是非常快的,几乎可以忽略不计

它真正节约的是读和写的时候跟硬盘之间打交道的时间,其根本原因是因为字节流默认不使用缓冲区;切勿与字符流搞混

1.3、字符缓冲流

 但是因为字符流本身就带有缓冲区,所以字符缓冲流对效率的提升就不是很明显。

构造方法:

 

特有方法:

package com.yaqi.mybufferedstream1;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class BufferedStreamDemo3 {public static void main(String[] args) throws IOException {/**   字符缓冲输入流:*      构造方法:*           public BufferedReader(Reader r)*      特有方法:*           public String readLine()   读一整行** *///1.创建字符缓冲输入流的对象BufferedReader br = new BufferedReader(new FileReader("myio\\a.txt"));//2.读取数据//细节://readLine方法在读取的时候,一次读一整行,遇到回车换行结束//        但是他不会把回车换行读到内存当中/*   String line1 = br.readLine();System.out.println(line1);String line2 = br.readLine();System.out.println(line2);*/String line;while ((( line = br.readLine()) != null)){System.out.println(line);}//3.释放资源br.close();}
}

 

1.4、小结

1.5、练习

1.5.1练习一:拷贝文件

 

package com.yaqi.mytest;import java.io.*;public class Test05 {public static void main(String[] args) throws IOException {/*四种方式拷贝文件,并统计各自用时*/long start = System.currentTimeMillis();//method1();//method2();          //16.253秒//method3();          //95.466秒//method4();            //17.686秒long end = System.currentTimeMillis();System.out.println((end - start) / 1000.0 + "秒");}//字节流的基本流:一次读写一个字节4,588,568,576 字节public static void method1() throws IOException {FileInputStream fis = new FileInputStream("E:\\aaa\\CentOS-7-x86_64-DVD-1810.iso");FileOutputStream fos = new FileOutputStream("myio\\copy.iso");int b;while ((b = fis.read()) != -1) {fos.write(b);}fos.close();fis.close();}//字节流的基本流:一次读写一个字节数组public static void method2() throws IOException {FileInputStream fis = new FileInputStream("E:\\aaa\\CentOS-7-x86_64-DVD-1810.iso");FileOutputStream fos = new FileOutputStream("myio\\copy.iso");byte[] bytes = new byte[8192];int len;while ((len = fis.read(bytes)) != -1) {fos.write(bytes, 0, len);}fos.close();fis.close();}//字节流的基本流:一次读写一个字节数组public static void method3() throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\aaa\\CentOS-7-x86_64-DVD-1810.iso"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\copy.iso"));int b;while ((b = bis.read()) != -1) {bos.write(b);}bos.close();bis.close();}//字节流的基本流:一次读写一个字节数组public static void method4() throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\aaa\\CentOS-7-x86_64-DVD-1810.iso"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myio\\copy.iso"));byte[] bytes = new byte[8192];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}bos.close();bis.close();}
}

 

1.5.2练习二:修改文本顺序

 示例代码:(Collections排序)

示例代码:(TreeMap排序)

 

 

1.5.3练习三:软件的运行次数
实现一个验证程序运行次数的小程序,要求如下:
1.当程序运行超过3次时给出提示:本软件只能免费使用3次,欢迎您注册会员后继续使用~
2.程序运行演示如下:第一次运行控制台输出: 欢迎使用本软件,第1次使用免费~第二次运行控制台输出: 欢迎使用本软件,第2次使用免费~第三次运行控制台输出: 欢迎使用本软件,第3次使用免费~第四次及之后运行控制台输出:本软件只能免费使用3次,欢迎您注册会员后继续使用~

 

//原则:
//IO:随用随创建
//    什么时候不用什么时候关闭

2、转换流(字符流的一种)

转换流是字符流和字节流之间的桥梁

2.1、转换流的基本用法

 指定字符集读取:

package com.yaqi.myconvertstream;import java.io.*;
import java.nio.charset.Charset;public class ConvertStreamDemo1 {public static void main(String[] args) throws IOException {/*利用转换流按照指定字符编码读取(了解)因为JDK11:这种方式被淘汰了。替代方案(掌握)F:\JavaSE最新版\day29-IO(其他流)\资料\gbkfile.txt*//* //1.创建对象并指定字符编码InputStreamReader isr = new InputStreamReader(new FileInputStream("myio\\gbkfile.txt"),"GBK");//2.读取数据int ch;while ((ch = isr.read()) != -1){System.out.print((char)ch);}//3.释放资源isr.close();*/FileReader fr = new FileReader("myio\\gbkfile.txt", Charset.forName("GBK"));//2.读取数据int ch;while ((ch = fr.read()) != -1){System.out.print((char)ch);}//3.释放资源fr.close();}
}

利用转换流按照指定字符编码写出数据: 

import java.io.*;
import java.nio.charset.Charset;public class ConvertStreamDemo2 {public static void main(String[] args) throws IOException {/*利用转换流按照指定字符编码写出*//*//1.创建转换流的对象OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myio\\b.txt"),"GBK");//2.写出数据osw.write("你好你好");//3.释放资源osw.close();*/FileWriter fw = new FileWriter("myio\\c.txt", Charset.forName("GBK"));fw.write("你好你好");fw.close();}
}

2,2、练习一:转换文件编码

将本地文件中的GBK文件,转成UTF-8 

package com.yaqi.myconvertstream;import java.io.*;
import java.nio.charset.Charset;public class ConvertStreamDemo3 {public static void main(String[] args) throws IOException {/*将本地文件中的GBK文件,转成UTF-8*///1.JDK11以前的方案/* InputStreamReader isr = new InputStreamReader(new FileInputStream("myio\\b.txt"),"GBK");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myio\\d.txt"),"UTF-8");int b;while((b = isr.read()) != -1){osw.write(b);}osw.close();isr.close();*///2.替代方案FileReader fr = new FileReader("myio\\b.txt", Charset.forName("GBK"));FileWriter fw = new FileWriter("myio\\e.txt",Charset.forName("UTF-8"));int b;while ((b = fr.read()) != -1){fw.write(b);}fw.close();fr.close();}
}

2.3、练习二:读取文件中的数据

 

package com.yaqi.myconvertstream;import java.io.*;public class ConvertStreamDemo4 {public static void main(String[] args) throws IOException {/*利用字节流读取文件中的数据,每次读一整行,而且不能出现乱码//1.字节流在读取中文的时候,是会出现乱码的,但是字符流可以搞定//2.字节流里面是没有读一整行的方法的,只有字符缓冲流才能搞定*//* FileInputStream fis = new FileInputStream("myio\\a.txt");InputStreamReader isr = new InputStreamReader(fis);BufferedReader br = new BufferedReader(isr);String str = br.readLine();System.out.println(str);br.close();*/BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("myio\\a.txt")));String line;while ((line = br.readLine()) != null){System.out.println(line);}br.close();}
}

2.4、小结

3、序列化流/对象操作输出流(字节流的一种)(ObjectOutputStream)

3.1、构造方法

3.2、成员方法

3.3、利用序列化流,把一个对象写到本地文件中

3.4、序列化流的小细节(NotSerializableException)

4、反序列化流/对象操作输入流(ObjectInputStream)

4.1、利用反序列化流/对象操作输入流,把文件中的对象读到程序当中

4.2、序列号不匹配

4.3、瞬态关键字(不会把当前属性序列化到本地文件中)

4.4、小结

4.5、综合练习:读写多个对象(先写再读)

5、打印流

5.1、字节打印流的构造方法

5.2、字节打印流的成员方法

5.3、占位符扩展

5.4、字符打印流的构造方法

5.5、字符打印流的成员方法

5.6、打印流的应用场景

5.7、小结

6、解压缩流/压缩流

6.1、解压缩流

6.2、压缩流(压缩单个文件)

6.3、压缩流(压缩文件夹)

7、Commons-io

7.1、Commons-io使用步骤

7.2、Commons-io常见方法

8、Hutool工具包

8.1、IO包的封装类

8.2、FileUtil类

九、综合练习

1、制造假数据

1.1、爬取姓氏

1.2、爬取名字

1.3、数据处理

1.4、数据处理并写出

1.5、利用HuTool包生成假数据

2、随机点名器

2.1、练习1:普通随机点名

2.2、练习2:加入了概率和统计

2.3、练习3:作弊功能

2.4、练习4:随机不能重复,自动开启第二轮

2.5、练习5:带权重的随机

3、登录注册

3.1、练习1:写一个登录小案例

3.2、练习2:添加锁定账号功能

3.3、练习3:补全拼图小游戏的登录注册(考虑多个用户)

4、游戏的存档和读档

4.1、存档

4.2、读档

4.3、修改bug

5、游戏配置

5.1、配置文件的优点

5.2、常见的配置文件

5.3、properties配置文件

5.4、Properties作为Map集合的操作

5.5、Properties跟IO流结合的操作(store)

5.6、读取Properties(load)

5.7、拼图游戏的配置文件

4、每日一记(IO的最终大作业)

相关文章:

黑马Java——IO流

一、IO流的概述 IO流&#xff1a;存储和读取数据的解决方案 IO流和File是息息相关的 1、IO流的分类 1.1、纯文本文件 word、Excel不是纯文本文件 而txt或者md文件是纯文本文件 2、小结 二、IO流的体系结构 三、字节流 1、FileOutputStream&#xff08;字节输出流&#xff…...

re:从0开始的CSS学习之路 11. 盒子垂直布局

1. 盒子的垂直布局的注意 若两个“相邻”垂直摆放的盒子&#xff0c;上面盒子的下外边距与下面盒子的上外边距会发生重叠&#xff0c;称为外边距合并 若合并后&#xff0c;外边距会选择重叠外边距的较大值 若两个盒子具有父子关系&#xff0c;则两个盒子的上外边距会发生重叠&…...

Kindling-OriginX 如何集成 DeepFlow 的数据增强网络故障的解释力

DeepFlow 是基于 eBPF 的可观测性开源项目&#xff0c;旨在为复杂的云基础设施及云原生应用提供深度可观测性。DeepFlow 基于 eBPF 采集了精细的链路追踪数据和网络、应用性能指标&#xff0c;其在网络路径上的全链路覆盖能力和丰富的 TCP 性能指标能够为专业用户和网络领域专家…...

轻松掌握Jenkins执行远程window的Jmeter接口脚本

Windows环境&#xff1a;10.1.2.78 新建与配置节点 【系统管理】—【管理节点】—【新建节点】输入节点名称&#xff0c;勾选“dumb slave”&#xff0c;点击ok 按如上配置&#xff1a; 说明&#xff1a; Name&#xff1a;定义slave的唯一名称标识&#xff0c;可以是任意字…...

UI文件原理

使用UI文件创建界面很轻松很便捷&#xff0c;他的原理就是每次我们保存UI文件的时候&#xff0c;QtCreator就自动帮我们将UI文件翻译成C的图形界面创建代码。可以通过以下步骤查看代码 到工程编译目录&#xff0c;一般就是工程同级目录下会生成另一个编译目录&#xff0c;会找到…...

OS设备管理

设备管理 操作系统作为系统资源的管理者&#xff0c;其提供的功能有&#xff1a;处理机管理、存储器管理、文件管理、设备管理。其中前三个管理都是在计算机的主机内部管理其相对应的硬件。 I/O设备 I/O即输入/输出。I/O设备即可以将数据输入到计算机&#xff0c;或者可以接收…...

Matlab绘图经典代码大全:条形图、极坐标图、玫瑰图、填充图、饼状图、三维网格云图、等高线图、透视图、消隐图、投影图、三维曲线图、函数图、彗星图

学会 MATLAB 中的绘图命令对初学者来说具有重要意义,主要体现在以下几个方面: 1. 数据可视化。绘图命令是 MATLAB 中最基本也是最重要的功能之一,它可以帮助初学者将数据可视化,更直观地理解数据的分布、变化规律和趋势。通过绘制图表,可以快速了解数据的特征,从而为后续…...

姿态传感器MPU6050模块之陀螺仪、加速度计、磁力计

MEMS技术 微机电系统&#xff08;MEMS, Micro-Electro-Mechanical System&#xff09;&#xff0c;也叫做微电子机械系统、微系统、微机械等&#xff0c;指尺寸在几毫米乃至更小的高科技装置。微机电系统其内部结构一般在微米甚至纳米量级&#xff0c;是一个独立的智能系统。 微…...

MySQL 基础知识(一)之数据库和 SQL 概述

目录 1 数据库相关概念 2 数据库的结构 ​3 SQL 概要 4 SQL 的基本书写规则 1 数据库相关概念 数据库是将大量的数据保存起来&#xff0c;通过计算机加工而成的可以进行高效访问的数据集合数据库管理系统&#xff08;DBMS&#xff09;是用来管理数据库的计算机系统&#xf…...

挑战杯 wifi指纹室内定位系统

简介 今天来介绍一下室内定位相关的原理以及实现方法; WIFI全称WirelessFidelity&#xff0c;在中文里又称作“行动热点”&#xff0c;是Wi-Fi联盟制造商的商标做为产品的品牌认证&#xff0c;是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关&#xff…...

Midjourney提示词风格调试测评

在Midjourney中提示词及风格参数的变化无疑会对最终的作品产生影响&#xff0c;那影响具体有多大&#xff1f;今天我我们将通过一个示例进行探究。 示例提示词&#xff1a; 计算机代码海洋中的黄色折纸船&#xff08;图像下方&#xff09;风格参考:金色长发的女人&#xff0c…...

Codeforces Round 926 (Div. 2)(A~C)

A. Sasha and the Beautiful Array 分析&#xff1a;说实话&#xff0c;打比赛的时候看到这题没多想&#xff0c;过了一下样例发现将数组排序一下就行&#xff0c;交了就过了。刚刚写题解反应过来&#xff0c;a2-a1a3-a2.....an-a(n-1) an - a1&#xff0c;所以最后结果只取决…...

Godot 游戏引擎个人评价和2024年规划(无代码)

文章目录 前言Godot C# .net core 开发简单评价Godot相关网址可行性 Godot(GDScirpt) Vs CocosGodot VS UnityUnity 的裁员Unity的股票Unity的历史遗留问题&#xff1a;Mono和.net core.net core的开发者&#xff0c;微软 个人的独立游戏Steam平台分成说明独立游戏的选题美术风…...

Win11关闭Windows Defender实时保护,暂时关闭和永久关闭方法 | Win10怎么永久关闭Windows Defender实时保护

文章目录 1. 按2. 暂时关闭Windows Defender实时保护3. 永久关闭实时保护 1. 按 开启Windows Defender实时保护有时候会导致系统变得异常卡顿&#xff0c;严重影响系统的流畅度&#xff0c;并且由于会有几率错误拦截和查杀我们的正常操作&#xff0c;所以还会导致我们的程序无…...

C# CAD2016 宗地生成界址点,界址点编号及排序

1 、界址点起点位置C# CAD2016 多边形顶点按方向重新排序 2、 界址点顺时针逆时针走向 C# CAD2016 判断多边形的方向正时针或逆时针旋转 3、块文件插入 //已知块文件名称 GXGLQTC //块文件需要插入的坐标点 scaledPoint// 插入块到当前图纸中的指定位置ObjectId newBlockId;B…...

[ai笔记7] google浏览器ai学习提效定制优化+常用插件推荐

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第7篇分享&#xff01; 工欲善其事必先利其器&#xff0c;为了ai学习的效能提升&#xff0c;放假期间对google浏览器做了一次系统整改&#xff0c;添加了一些配置和插件&#xff0c;这里既有一些显示、主…...

联想thinkpad-E450双系统升级记

早期笔记本联想thinkpad-E450双系统 大约16年花4000多大洋&#xff0c;买了一台thinkpad-E450屏幕是16寸本&#xff0c;有AMD独立显卡&#xff0c;i5cpu&#xff0c;4G内存。 . 后来加了一个同型号4G内存组成双通道&#xff0c; . 加了一个三星固态500G&#xff0c; . 换了一个…...

Mysql运维篇(四) Xtarbackup--备份与恢复练习

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 前言 xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具&#xff0c;具有…...

vue3 封装一个通用echarts组件

实现这个组件需要引入echarts和vue-echarts插件&#xff0c;使用vue-echarts是因为它帮我们封装了一些很常用的功能&#xff0c;比如监听页面resize后重新渲染功能&#xff0c;本次组件只使用到了autoresize配置&#xff0c;其它可以根据官方文档按需选配 https://github.com/…...

安装 Windows Server 2003

1.镜像安装 镜像安装:Windows Server 2003 2.安装过程(直接以图的形式呈现) 按Enter(继续),继续后F8继续 直接Enter安装 下一步 秘钥:GM34K-RCRKY-CRY4R-TMCMW-DMDHM 等待安装成功即可...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...