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

IO流部分串讲

一、IO流的概念简析:

java将输入与输出比喻为"流",英文:Stream. 就像生活中的"电流","水流"一样,它是以同一个方向顺序移动的过程.只不过这里流动的是字节(2进制数据).所以在IO中有输入流和输出流之分,我们理解他们是连接程序与另一端的"管道",用于获取或发送数据到另一端.

Java I/O 这里的I和O指的是输入与输出

输入:Input 用来读取数据的

输出:Output 用来写出数据的

二、IO流常用类的分类:

2.1.分类方式1:按照读取数据到电脑内存和将电脑内存输出到内存之外,分为输入流和输出流

输入流: FileInputStream、 BufferedInputStream、 ObjectInputStream、InputStreamReader、 BufferedReader

输出流: FileOutputStream、BufferedoutputStream、 ObjectOutputStream、OutputStreamWriter、PrintWriter

2.2.分类方式2: 按照直接操作数据及间接操作数据的方式分为节点流和处理流或者低级流和高级流。 注: 处理流不能单独使用,需要封装一个节点流。

节点流/低级流: FileInputStream、FileOutputStream。

处理流/高级流: BufferedInputStream和BufferedoutputStream、 ObjectInputStream和ObjectOutputStream、InputStreamReader和OutputStreamWriter、 BufferedReader和PrintWriter

2.3.分类方式3: 按是否可以操作字符,分为字节流和字符流。

字节流: FileInputStream和FileOutputStream、 BufferedInputStream和BufferedoutputStream、 ObjectInputStream和ObjectOutputStream。

字符流: InputStreamReader和OutputStreamWriter、 BufferedReader和PrintWriter

三、API用法演示:

3.1.FileInputStream和FileOutputStream演示:


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;/*** 注:因为FileInputStream和 FileOutputStream直接操作的是文件* 不能封装其他字节流,所以无法用FileInputStream和 FileOutputStream* 操作idea控制台数据*/
public class FIS_FOSTestDemo {public static void main(String[] args) throws Exception {//fisWriteTestMethod();fisReadTestMethod();}//true:表示追加写入private static void fisWriteTestMethod() throws Exception {//1.创建文件字节输出流对象,用于操作"剑来.txt"FileOutputStream fos=new FileOutputStream("剑来.txt",true);//2.将一段文字转为字节数组, 然后用fos的write()方法写出到txt文件byte[] bytes=("故事主人翁,现文圣关门弟子。出生在三十六小洞天之一的"+"骊珠洞天。父母皆姓陈,陈平安5岁时,\n有人让他父亲知道了小镇的"+"秘密,就打碎了陈平安的本命瓷").getBytes();fos.write(bytes,0,bytes.length);bytes=("父母因受反噬而双双离世,其父被人(马婆婆的儿子,马苦玄的父亲)"+"害死,\n其母病重而死。陈平安本命瓷被打碎后,宛如黑暗中的萤火,"+"小镇的机缘纷纷向他涌来,但却留不住\n").getBytes();fos.write(bytes,0,bytes.length);//3.关闭文件字节输出流对象fos.close();System.out.println("写出文字到txt文件完毕!!!");}private static void fisReadTestMethod() throws IOException {//long time1=System.currentTimeMillis();//1.创建文件字节输入流对象,用于操作"剑来.txt"FileInputStream fis=new FileInputStream("xz.txt");//2.用fis的read()方法将输入流的数据读到一个字节数组中int c=0;//因为要读取txt文件中的汉字所以需要字节数组存储,//再将字节数组中的数据转化为String字符串//(如果只是读取英文文字就不需要字节数组了)byte[] dataBuffer=new byte[1024];//因为要读取txt文件中的汉字所以需要字节数组存储,//再将字节数组中的数据转化为String字符串//(如果只是读取英文文字就不需要字节数组了)while( (c=fis.read(dataBuffer))  != -1){System.out.print( new String(dataBuffer, 0 ,c));}//3.关闭文件字节输入流对象//(如果只是读取英文文字就需要像下边的写法就可以了)/*FileInputStream fis=new FileInputStream("english.txt");int c=0;while( (c=fis.read())  != -1){System.out.print( (char)c);}*/fis.close();//long time2=System.currentTimeMillis();//System.out.println(time2-time1);}
}

3.2.BufferedInputStream和BufferedOutputStream演示:


import java.io.*;/*** 测试缓冲字节输入流,和缓冲字节输出流* 因为它们俩可以封装节点流,所以可以用来操作idea控制台数据*/
public class BOS_BOSTestDemo2 {public static void main(String[] args) throws Exception {//fisWriteTestMethod1();//fisWriteTestMethod2();//fisReadTestMethod1();//fisReadTestMethod1();fisReadTestMethod2();}/**1.测试将String字符串数据用缓冲字节输出流写出到txt文件*/private static void fisWriteTestMethod1() throws Exception {//true:表示追加写入//1.创建文件字节输出流对象,并将其封装在缓冲字节输出流中,用于操作"剑来.txt"FileOutputStream fos=new FileOutputStream("剑来.txt",true);BufferedOutputStream bos=new BufferedOutputStream(fos);//2.将一段文字转为字节数组, 然后用bos的write()方法写出到txt文件byte[] bytes=("故事主人翁,现文圣关门弟子。出生在三十六小洞天之一的骊珠洞天。父母皆姓陈," +"陈平安5岁时,\n有人让他父亲知道了小镇的秘密,就打碎了陈平安的本命瓷").getBytes();bos.write(bytes,0,bytes.length);bytes=("父母因受反噬而双双离世,其父被人(马婆婆的儿子,马苦玄的父亲)害死,\n其母病重而死。" +"陈平安本命瓷被打碎后,宛如黑暗中的萤火,小镇的机缘纷纷向他涌来,但却留不住\n").getBytes();bos.write(bytes,0,bytes.length);//注意:缓冲字节输出流中也有一个字节缓冲区,会先将bytes字节数组中的数据//暂存到缓冲字节输入流中的字节缓冲区, 填满缓冲区后再写出到txt文件中//(所以用BufferedOutputStream缓冲字节输入流比单纯用FileOutputStream的效率高// 类似于先将数据暂存到一个卡车中,然后拉走// <FileOutputStream相当于一次只拉一点点儿,不是一次拉一车>),//(如果用time2-tim1 再换一个更大的txt文件,就会发现BufferedOutputStream比FileOutputStream效率更高)//3.关闭缓冲字节输出流对象bos.close();System.out.println("写出文字到txt文件完毕!!!");}/**2.测试将String字符串数据用缓冲字节输出流写出到idea控制台*/private static void fisWriteTestMethod2() throws Exception {//true:表示追加写入//1.创建文件字节输出流对象,并将其封装在缓冲字节输出流中,用于操作"剑来.txt"BufferedOutputStream bos=new BufferedOutputStream(System.out);//2.将一段文字转为字节数组, 然后用bos的write()方法写出到txt文件byte[] bytes=("故事主人翁,现文圣关门弟子。出生在三十六小洞天之一的骊珠洞天。父母皆姓陈," +"陈平安5岁时,\n有人让他父亲知道了小镇的秘密,就打碎了陈平安的本命瓷").getBytes();bos.write(bytes,0,bytes.length);bytes=("父母因受反噬而双双离世,其父被人(马婆婆的儿子,马苦玄的父亲)害死,\n其母病重而死。" +"陈平安本命瓷被打碎后,宛如黑暗中的萤火,小镇的机缘纷纷向他涌来,但却留不住\n").getBytes();bos.write(bytes,0,bytes.length);//注意:缓冲字节输出流中也有一个字节缓冲区,会先将bytes字节数组中的数据//暂存到缓冲字节输入流中的字节缓冲区, 填满缓冲区后再写出到txt文件中//(所以用BufferedOutputStream缓冲字节输入流比单纯用FileOutputStream的效率高// 类似于先将数据暂存到一个卡车中,然后拉走// <FileOutputStream相当于一次只拉一点点儿,不是一次拉一车>),//(如果用time2-tim1 再换一个更大的txt文件,就会发现BufferedOutputStream比FileOutputStream效率更高)//3.关闭缓冲字节输出流对象bos.close();System.out.println("写出文字到txt文件完毕!!!");}/** 3.测试从txt文件中,读取String字符串数据并打印*/private static void fisReadTestMethod1() throws IOException {//long time1=System.currentTimeMillis();//1.创建文件字节输入流对象,然后将其封装在缓冲字节输入流对象中,用于操作"剑来.txt"FileInputStream fis=new FileInputStream("剑来.txt");BufferedInputStream bis=new BufferedInputStream(fis);//2.用bis的read()方法将输入流的数据读到一个字节数组中int c=0;//因为要读取txt文件中的汉字所以需要字节数组存储,//再将字节数组中的数据转化为String字符串//(如果只是读取英文文字就不需要字节数组了)//注意:缓冲字节输入流中也有一个字节缓冲区,会先将文件中的数据//读取到缓冲字节输入流中的字节缓冲区, 填满缓冲区后再挪到dataBuffer数组//(所以用BufferedInputStream缓冲字节输入流比单纯用FileInputStream的效率高// 类似于先将数据暂存到一个卡车中,然后拉走// <FileInputStream相当于一次只拉一点点儿,不是一次拉一车>),//(如果用time2-tim1 再换一个更大的txt文件,就会发现BufferedInputStream比FileInputStream效率更高)//外边的dataBuffer此时只起到为了积攒汉字字符串的作用(两个字节组成一个汉字)//如果txt文件全是英文,则就不需要dataBuffer数组byte[] dataBuffer=new byte[1024];while( (c=bis.read(dataBuffer))  != -1){System.out.print( new String(dataBuffer, 0 ,c));}bis.close();//long time2=System.currentTimeMillis();//System.out.println(time2-time1);}/**4.测试用缓冲字节输入流从idea控制台读取文字并打印* (从控制台输入一个 就立即用缓冲字节输入流读取这个信息并打印,* 因为没有关闭System.in控制台输入流所以可以无限输入并读取)* 因为bis.close()方法内不会关闭System.in控制台输入流,所以可以无限输入并读取*/private static void fisReadTestMethod2() throws IOException {//long time1=System.currentTimeMillis();//1.创建文件字节输入流对象,然后将其封装在缓冲字节输入流对象中,用于操作"剑来.txt"BufferedInputStream bis=new BufferedInputStream(System.in);//2.用bis的read()方法将输入流的数据读到一个字节数组中int c=0;byte[] dataBuffer=new byte[1024];while( (c=bis.read(dataBuffer))  != -1){System.out.print( new String(dataBuffer, 0 ,c));}bis.close();//long time2=System.currentTimeMillis();//System.out.println(time2-time1);}
}

3.3.BufferedReader和PrintWriter按行操作的字符流演示:


import java.io.*;/**测试BufferedReader的按行读取的方法readLine(), 和PrintWriter按行写的方法println()*/
public class BR_PW_TestDemo1 {public static void main(String[] args) throws Exception {writeLineTest();readLineTest();}/**1.缓冲字符输出流PrintWriter:  测试将电脑内存数据写出到电脑硬盘txt文件*/private static void writeLineTest() throws FileNotFoundException {/*FileOutputStream fos=new FileOutputStream("仙剑.txt");OutputStreamWriter osw=new OutputStreamWriter(fos);PrintWriter pw=new PrintWriter(osw);*/// A.PrintWriter创建对象时, 也可以调用具有一个参数且类型为Writer的构造方法来传入一个字符转换流// 注: 字符转换流创建时需要传入一个字节流对象//PrintWriter pw=new PrintWriter(new FileOutputStream("仙剑.txt"));// B.PrintWriter创建对象时, 也可以调用具有一个参数且类型为OutputStream的构造方法来传入一个字节输出流PrintWriter pw=new PrintWriter("仙剑.txt");// C.PrintWriter创建对象时, 可以调用具有一个String参数的构造方法可以直接指定文件名pw.println("仙剑1");pw.println("仙剑2");pw.println("仙剑3");System.out.println("向仙剑.txt文件写出数据完毕!!!!!!!!!!");pw.close();}/**2.缓冲字符输入流BufferedReader:  测试读取硬盘txt文件的数据到电脑内存*/private static void readLineTest() throws Exception {FileInputStream fis=new FileInputStream("剑来.txt");InputStreamReader isr=new InputStreamReader(fis);BufferedReader br=new BufferedReader(isr);// readLine(): 可以一次读一行文字String c="";while( (c=br.readLine())   !=  null){System.out.println(c);}br.close();}
}

3.4.BufferedReader和PrintWriter操作控制台的案例演示:


import java.io.*;/**测试BufferedReader的按行读取idea控制台数据的方法readLine(),和PrintWriter按行向idea控制台写数据的方法println()*/
public class BR_PW_TestDemo2 {public static void main(String[] args) throws Exception {//运行提示:要测试哪个方法就放开此方法(注释掉另一个方法)writeLineTest();//readLineTest();}/**1.缓冲字符输出流PrintWriter:* 测试将电脑内存数据用println()按行写出到idea控制台* System.out:代表向idea控制台输出数据的字节输出流*/private static void writeLineTest() throws FileNotFoundException {PrintStream out=System.out;//代表向idea控制台输出数据的输出流PrintWriter pw=new PrintWriter(out);//创建PrintWriter对象时可以调用具有一个参数且类型为//OutputStream的构造方法来传入一个字节输出流pw.println("仙剑1");pw.println("仙剑2");pw.println("仙剑3");pw.close();out.close();//关闭System.out控制台输出流(不会pw.close()方法中关闭System.out流)//不关闭的话本方法会一直运行(不会结束<System.out输出流一直占用cpu>)}//本方法的运行效果就是: 将三行文字输出到idea控制台/**2.缓冲字符输入流BufferedReader:* 测试读取idea控制台数据到电脑内存* System.in:代表从idea控制台读取数据的字节输入流*/private static void readLineTest() throws Exception {InputStreamReader isr=new InputStreamReader(System.in);BufferedReader br=new BufferedReader(isr);// readLine(): 可以一次读一行文字String c="";while( (c=br.readLine())   !=  null){System.out.println(c);}br.close();}//本方法的运行效果如下://你好 //用户输入//你好 //本行打印//程序读取上一行的数据并在本行打印//hello //用户输入//hello //本行打印//程序读取上一行的数据并在本行打印//离离原上草 //用户输入//离离原上草 //本行打印//程序读取上一行的数据并在本行打印
}

四、练习案例:

4.1.FileInputStream 和FileOutputStream 实现文件复制:

public static void main(String[] args)throws  Exception{//1.创建文件字节输入流对象,用于读取"剑来.txt"//创建文件字节输出流对象,用于将读取的数据写出到生成//的一个复制出来的"剑来_bak.txt"FileInputStream fis=new FileInputStream("剑来.txt");FileOutputStream fos=new FileOutputStream("剑来_bak.txt",true);//2.用文件字节输入流fis的read()方法将输入流的数据读到一个字节数组中//然后立即用文件字节输出流fos的write()方法将字节数组中的数据写出到bak文件int c=0;while( (c=fis.read())  != -1){fos.write(c);fos.flush();//刷新缓冲区,将缓冲区中的数据强制写出到bak文件}//3.关闭文件字节输入流对象和文件字节输出流对象fos.close();fis.close();
}

注: 因为FileInputStream 和FileOutputStream 必须直接封装一个String文件路径或者封装一个File对象, 所以不能操作idea控制台数据。

4.2.BufferedOutputStream和BufferedOutputStream实现文件复制及读取控制台数据并向控制台输出数据:

A.文件复制:

/**1.测试用缓冲字节输入流和缓冲字节输出流复制文件*/
private static void bos_bosCopyTestMethod1() throws Exception{//1.创建文件字节输入流对象,然后将其封装在缓冲字节输入流对象中,用于读取"剑来.txt"//创建文件字节输出流对象,并将其封装在缓冲字节输出流中,用于将读取的数据写出到生成//的一个复制出来的"剑来_bak.txt"FileInputStream fis=new FileInputStream("剑来.txt");BufferedInputStream bis=new BufferedInputStream(fis);FileOutputStream fos=new FileOutputStream("剑来_bak.txt",true);BufferedOutputStream bos=new BufferedOutputStream(fos);//2.用缓冲字节输入流bis的read()方法将输入流的数据读到一个字节数组中int c=0;while( (c=bis.read())  != -1){bos.write(c);bos.flush();//刷新缓冲区,将缓冲区中的数据强制写出到bak文件}//注意:缓冲字节输出流中也有一个字节缓冲区,会先将bytes字节数组中的数据//暂存到缓冲字节输入流中的字节缓冲区, 填满缓冲区后再写出到txt文件中//(所以用BufferedOutputStream缓冲字节输入流比单纯用FileOutputStream的效率高// 类似于先将数据暂存到一个卡车中,然后拉走// <FileOutputStream相当于一次只拉一点点儿,不是一次拉一车>),//(如果用time2-tim1 再换一个更大的txt文件,就会发现BufferedOutputStream比FileOutputStream效率更高)bos.close();bis.close();
}

B.读取控制台数据并将读取的数据输出:

/**2.测试用缓冲字节输入流读取idea控制台数据和缓冲字节输出流将读取的数据再写出到idea控制台*/
private static void bos_bosCmdOpeTestMethod2() throws Exception{//1.创建文件字节输入流对象,然后将其封装在缓冲字节输入流对象中,用于读取"剑来.txt"//创建文件字节输出流对象,并将其封装在缓冲字节输出流中,用于将读取的数据写出到生成//的一个复制出来的"剑来_bak.txt"BufferedInputStream bis=new BufferedInputStream(System.in);BufferedOutputStream bos=new BufferedOutputStream(System.out);//2.用缓冲字节输入流bis的read()方法将输入流的数据读到一个字节数组中int c=0;while( (c=bis.read())  != -1){bos.write(c);bos.flush();//刷新缓冲区,将缓冲区中的数据强制写出到bak文件}//注意:缓冲字节输出流中也有一个字节缓冲区,会先将bytes字节数组中的数据//暂存到缓冲字节输入流中的字节缓冲区, 填满缓冲区后再写出到txt文件中//(所以用BufferedOutputStream缓冲字节输入流比单纯用FileOutputStream的效率高// 类似于先将数据暂存到一个卡车中,然后拉走// <FileOutputStream相当于一次只拉一点点儿,不是一次拉一车>),//(如果用time2-tim1 再换一个更大的txt文件,就会发现BufferedOutputStream比FileOutputStream效率更高)bos.close();bis.close();
}

测试:

public static void main(String[] args) throws Exception {bos_bosCopyTestMethod1();bos_bosCmdOpeTestMethod2();
}

4.3.BufferedReader和PrintWriter按行进行文件复制及读取控制台数据并打印到控制台。

A.按行进行文件复制

/**1.一个BufferedReader和PrintWriter按行复制的案例*/
private static void BR_PWCopy_TestMethod1()throws Exception {//1.构建: 缓冲字符输入流和缓冲字符输出流对象FileInputStream fis=new FileInputStream("剑来.txt");InputStreamReader isr=new InputStreamReader(fis);BufferedReader br=new BufferedReader(isr);PrintWriter pw=new PrintWriter("剑来_bak.txt");//注:PrintWriter创建对象时, 可以调用具有一个String参数的构造方法可以直接指定文件名//2.用缓冲字符输入流的readLine()方法读取一行文字,//然后立即用缓冲字符输出流的println()方法写出本行文字到bak文件(实现复制),直到读完为止String strLine="";while( (strLine=br.readLine())   !=  null){pw.println(strLine);pw.flush();}//3.关闭缓冲字符输入流和缓冲字符输出流对象br.close();pw.close();
}

B.读取控制台数据并打印到控制台

/**2.测试用缓冲字符输入流的readLine()按行读取idea控制台数据* 并用缓冲字符输出流将读取的数据再写出到idea控制台*/
private static void BR_ReadCMD_PW_Print_TestMethod2()throws Exception{//1.构建: 缓冲字符输入流(操作idea控制台的数据)和//缓冲字符输出流对象(将数据写出到idea控制台)InputStreamReader isr=new InputStreamReader(System.in);BufferedReader br=new BufferedReader(isr);//System.in字节输入流: 用于读取idea控制台的数据//System.out字节输出流: 用于写出数据到idea控制台OutputStreamWriter osw=new OutputStreamWriter(System.out);PrintWriter pw=new PrintWriter(osw);//2.用缓冲字符输入流的readLine()方法读取一行文字,//然后立即用缓冲字符输出流的println()方法写出本行文字到控制台,直到读完为止String strLine="";while( (strLine=br.readLine())   !=  null){pw.println(strLine);pw.flush();}//3.关闭缓冲字符输入流和缓冲字符输出流对象br.close();pw.close();
}

测试:

public static void main(String[] args) throws Exception {BR_PWCopy_TestMethod1();BR_ReadCMD_PW_Print_TestMethod2();
}

相关文章:

IO流部分串讲

一、IO流的概念简析&#xff1a; java将输入与输出比喻为"流"&#xff0c;英文:Stream. 就像生活中的"电流","水流"一样,它是以同一个方向顺序移动的过程.只不过这里流动的是字节(2进制数据).所以在IO中有输入流和输出流之分,我们理解他们是连接…...

Excel——宏教程(2)

Excel——宏教程(2) 一)、处理单元格 1、直接赋值与引用 将变量、常量值直接赋给单元格、或将单元格的值直接赋给变量、常量&#xff0c;这是在excel中最简单的单元格赋值及引用方法。 如下例将工作表"Sheet1"A1单元格的值赋给Integer变量I&#xff0c;并将I1的值…...

unity 中 RectTransform 的常用几个属性

RectTransform rectTransform this.GetComponent<RectTransform>(); rectTransform this.transform as RectTransform; Vector3 vector1 rectTransform.position; //自身轴心点相对于锚点的位置&#xff08;编译器显示的pos&#xff09; …...

项目-摄像

树莓派摄像头使用方法 Camera教程 https://www.raspi.cc/index.php?cread&id53&page1 nanopc-t4 ​https://www.raspi.cc/index.php?cread&id53&page1 摄像头型号 Raspberry Pi Camera Rev 1.3 检测故障 dmesg | grep -i mipi piNanoPC-T4:~$ dmesg | …...

摄像机ISP和DSP的区别?

影像处理器是现代数字相机、手机等电子设备中极其重要的一部分&#xff0c;它能够对传感器采集的图像进行多种操作&#xff0c;从而得到更高质量的图像。常见的两种影像处理芯片有ISP&#xff08;Image Signal Processor&#xff09;和DSP&#xff08;Digital Signal Processor…...

Ubuntu24安装配置NDK

1、下载NDK 下载压缩包&#xff0c;下载地址如下&#xff0c;建议下载LTS支持版本。 https://developer.android.google.cn/ndk/downloads?hlcs 2、解压缩 将NDK解压到指定文件夹。如&#xff1a;/opt 或者先解压&#xff0c;再移动到指定目录下。 3、配置环境变量 找到…...

【Next】中间件

概述 Next.js 的 中间件 (Middleware) 是一种在请求完成之前运行的函数&#xff0c;用于对入站请求进行处理和操作。它可以在路由匹配前执行逻辑&#xff0c;用于身份验证、请求重写、重定向、设置响应头等任务。 使用场景 身份验证&#xff1a;在用户访问页面前检查登录状态…...

Vulnhub靶场案例渗透[11]- Momentum2

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. 代码审计5. 反弹shell6. 提权 一、靶场搭建 1. 靶场描述 - Difficulty : medium - Keywords : curl, bash, code reviewThis wor…...

STM32设计防丢防摔智能行李箱-分享

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展&#xff0c;嵌入式系统、物联网技术、智能设备…...

Vue Mixin混入机制

在 Vue.js 中&#xff0c;Mixin&#xff08;混入&#xff09;是一种可复用代码的机制&#xff0c;用于在多个组件之间共享逻辑。通过混入&#xff0c;可以将通用功能提取到一个独立的文件中&#xff0c;然后在组件中引入并使用&#xff0c;而无需重复代码。 基本概念 Mixin 是…...

数据库类型建表

接着上次的数据库笔记&#xff1a; 初始数据库 &#xff08;是博主自己写的&#xff09; 1.数据库类型 1.1数值类型 数据类型大小说明对应JAVA类型BIT[(M)]M指定位数&#xff0c;默认值为1二进制数&#xff0c;M的范围从1—64&#xff0c;存储数值范围从0—2^M-1常用Bool…...

iOS 18 导航栏插入动画会导致背景短暂变白的解决

问题现象 在最新的 iOS 18 系统中,如果我们执行导航栏的插入动画,可能会造成导航栏背景短暂地变为白色: 如上图所示:我们分别向主视图和 Sheet 弹出视图的导航栏插入了消息,并应用了动画效果。可以看到,前者的导航栏背景会在消息插入那一霎那“变白”,而后者则没有任何…...

深度学习之人脸检测

在目标检测领域可以划分为了人脸检测与通用目标检测&#xff0c;往往人脸这方面会有专门的算法&#xff08;包括人脸检测、人脸识别、人脸其他属性的识别等等&#xff09;&#xff0c;并且和通用目标检测&#xff08;识别&#xff09;会有一定的差别&#xff0c;着主要来源于人…...

解决前后端发版本时候,手动清除浏览器缓存

在.html页面中添加标签 后端配置nginx,让index.html不缓存 location /index.html { add_header Cache-Control “no-cache, no-store”; }在vite.config.ts中添加 rollupOpyions: { output: { // 输出编译后的文件名称&#xff1a;【文件名称.时间戳】、【文件名称.版本号.…...

mysql8.4+mysql router读写分离

以下为容器环境内搭建 准备工作: 拉取镜像: 镜像版本mysql8.4container-registry.oracle.com/mysql/community-router8.4 下载mysql_shell mysql-shell-9.0.1-linux-glibc2.17-x86-64bit.tar.gz 下载地址: https://downloads.mysql.com/archives/shell/ 参考 这里对这篇文章…...

鸿蒙NEXT开发-用户通知服务的封装和文件下载通知

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…...

RHCE——系统的延迟任务及定时任务

延迟任务的发起 在系统中我们可以使用 at 命令来发起延迟任务 at 命令执行是调用的是 atd 服务&#xff0c;即使系统最小化安装 atd 也会被安装到系统中 at 任务信息存放在系统中 /var/spool/at 目录中 at 任务的日志文件被存放到 /var/log/cron 中 at 任务执行时如果遇…...

ForEach刷新UI机制

官网地址&#xff1a;ForEach 在ArkUI中&#xff0c;提供了ForEach循环语句&#xff0c;用来初始化一个列表数据&#xff0c;我们知道&#xff0c;当ForEach中的数组发生变化时&#xff0c;会引起UI的刷新&#xff0c;但是究竟如何变化&#xff0c;会引起UI怎样的刷新&#xf…...

机器学习(贝叶斯算法,决策树)

朴素贝叶斯分类 贝叶斯分类理论 假设现有两个数据集&#xff0c;分为两类 我们现在用p1(x,y)表示数据点(x,y)属于类别1(图中红色圆点表示的类别)的概率&#xff0c;用p2(x,y)表示数据点(x,y)属于类别2(图中蓝色三角形表示的类别)的概率&#xff0c;那么对于一个新数据点(x,y)…...

实验十三 生态安全评价

1 背景及目的 生态安全是生态系统完整性和健康性的整体反映&#xff0c;完整健康的生态系统具有调节气候净化污染、涵养水源、保持水土、防风固沙、减轻灾害、保护生物多样性等功能。维护生态安全对于人类生产、生活、健康及可持续发展至关重要。随着城市化进程的不断推进&…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...