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

Day15——File类与IO流

1.java.io.File类的使用

1.1 File类的理解

  1. File 类及本章下的各种流,都定义在 java.io 包下。
  2. 一个 File 对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象)。
  3. File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
    • File 对象可以作为参数传递给流的构造器。
  4. 想要在 Java 程序中表示一个真实存在的文件或目录,那么必须有一个 File 对象,但是Java 程序中的一个 File 对象,可能没有一个真实存在的文件或目录。

1.2 构造器

  1. public File(String pathname) :以 pathname 为路径创建 File 对象,可以是绝对路径或者相对路径,如果 pathname 是相对路径,则默认的当前路径在系统属性user.dir 中存储。
    • 绝对路径:包括盘符在内的文件或文件目录的完整路径。
    • 相对路径:相对于某一个文件目录来讲的相对位置。
      • 在IDEA中,如果使用main方法,相对于当前的project来说。
      • 如果使用单元测试方法,相对于当前的module来讲。
  2. public File(String parent, String child) :以 parent 为父路径,child 为子路径创建 File 对象。
    • 参数1:一定是文件目录。
    • 参数2:可以是文件或文件目录。
  3. public File(File parent, String child) :根据一个父 File 对象和子文件路径创建 File 对象。
    • 参数1:一定是文件目录。
    • 参数2:可以是文件或文件目录。

1.3 常用方法

1.3.1 获取文件和目录基本信息

  1. public String getName() :获取名称。
  2. public String getPath() :获取路径。
  3. public String getAbsolutePath():获取绝对路径。
  4. public File getAbsoluteFile():获取绝对路径表示的文件。
  5. public String getParent():获取上层文件目录路径。若无,返回 null。
  6. public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
  7. public long lastModified() :获取最后一次的修改时间,毫秒值。
    • 如果 File 对象代表的文件或目录存在,则 File 对象实例初始化时,就会用硬盘中对应文件或目录的属性信息(例如,时间、类型等)为File 对象的属性赋值,否则除了路径和名称,File 对象的其他属性将会保留默认值。

1.3.2 列出目录的下一级

  1. public String[] list() :返回一个 String 数组,表示该 File 目录中的所有子文件或目录。
  2. public File[] listFiles() :返回一个 File 数组,表示该 File 目录中的所有的子文件或目录。

1.3.3 File类的重命名功能

  1. public boolean renameTo(File dest):把文件重命名为指定的文件路径。

1.3.4 判断功能的方法

  1. public boolean exists() :此 File 表示的文件或目录是否实际存在。
  2. public boolean isDirectory() :此 File 表示的是否为目录。
  3. public boolean isFile() :此 File 表示的是否为文件。
  4. public boolean canRead() :判断是否可读。
  5. public boolean canWrite() :判断是否可写。
  6. public boolean isHidden() :判断是否隐藏。

1.3.5 创建、删除功能

  1. public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false。
  2. public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
  3. public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建。
  4. public boolean delete() :删除文件或者文件夹 删除注意事项:
    • Java 中的删除不经过回收站。
    • 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。
/*** 创建一个与hello.txt在相同文件目录下的另一个名为abc.txt的文件*/
public class Exer1 {public static void main(String[] args) {File file1 = new File("hello.txt");System.out.println(file1.getAbsolutePath());File file2 = new File(file1.getAbsoluteFile().getParent(), "abc.txt");System.out.println(file2.getAbsolutePath());}
}

2.IO流原理及流的分类

2.1 IO原理

I/O 流中的 I/O 是 Input/Output 的缩写, I/O 技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。

  • 输入 input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。
  • 输出 output:将程序(内存)数据输出到磁盘、光盘等存储设备中。

2.2 流的分类

java.io 包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。

  1. 按数据的流向不同分为:输入流和输出流。
    • 输入流 :把数据从其他设备上读取到内存中的流。以 InputStream、Reader 结尾。
    • 输出流 :把数据从内存中写出到其他设备上的流。以 OutputStream、Writer 结尾。
  2. 按操作数据单位的不同分为:字节流(8bit)和字符流(16bit)。
    • 字节流 :以字节为单位,读写数据的流。以InputStream、OutputStream 结尾。
    • 字符流 :以字符为单位,读写数据的流。以 Reader、Writer 结尾。
  3. 根据 IO 流的角色不同分为:节点流和处理流。
    • 节点流:直接从数据源或目的地读写数据。
    • 处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。

3.流的API

Java 的 IO 流共涉及 40 多个类,实际上非常规则,都是从如下 4 个抽象基类派生的。

  1. 输入流:
    • 字节流:InputStream。
    • 字符流:Reader。
  2. 输出流:
    • 字节流:OutputStream。
    • 字符流:Writer。

3.1 常用的节点流

  1. 文件流: FileInputStream、FileOutputStrean、FileReader、FileWriter 。
  2. 字节/字符数组流: ByteArrayInputStream、ByteArrayOutputStream、CharArrayReader、CharArrayWriter。
    • 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。

3.2 常用的处理流

  1. 缓冲流:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter。
    • 作用:增加缓冲功能,避免频繁读写硬盘,进而提升读写效率。
  2. 转换流:InputStreamReader、OutputStreamReader。
    • 作用:实现字节流和字符流之间的转换。
  3. 对象流:ObjectInputStream、ObjectOutputStream。
    • 作用:提供直接读写 Java 对象功能。

4.FileReader\FileWriter的使用

4.1 执行步骤

  1. 第1步:创建读取或写出File类的对象。
  2. 第2步:创建输入流或输出流。
  3. 第3步:具体的读入或写出的过程。
    • 读入:read(char[] cbuffer)
    • 写出:write(String str)/write(char[] cbuffer,0,len)
  4. 第4步:关闭流,避免内存泄漏。
    @Testpublic void test2() {FileReader reader = null;try {//1.创建File对象,对应hello.txt文件File file = new File("C:\\Users\\22923\\Desktop\\Java\\Java SE\\src\\p177\\hello.txt");//2.创建输入的字符流,用于读取数据reader = new FileReader(file);//3.读取数据并显示到控制台上char[] cbuffer = new char[5];int len;while ((len = reader.read(cbuffer)) != -1) {for (int i = 0; i < len; i++) {System.out.print(cbuffer[i]);}}} catch (IOException e) {e.printStackTrace();} finally {//4.关闭流资源try {if (reader != null) {reader.close();}} catch (IOException e) {e.printStackTrace();}}}
    @Testpublic void test3(){FileWriter fileWriter = null;try {//1.创建File对象,指明要写出的文件名称File file = new File("C:\\Users\\22923\\Desktop\\Java\\Java SE\\src\\p177\\info.txt");//2.创建输出流//覆盖文件使用的构造器fileWriter = new FileWriter(file);//在现有的文件基础上追加内容使用的构造器fileWriter = new FileWriter(file, false);//3.写出的具体过程fileWriter.write("hellowoeld123");} catch (IOException e) {e.printStackTrace();} finally {try {if (fileWriter != null)//4.流的关闭fileWriter.close();} catch (IOException e) {e.printStackTrace();}}}

4.2 注意点

  1. 涉及到流资源的关闭操作,所以出现异常时,需要使用try-catch-finally方式来处理异常。
  2. 对于输入流来说,要求File类的对象对应的物理磁盘上的文件必须存在,否则会报FileNotFoundException。
  3. 对于输出流来说,File类的对象对应物理磁盘上的文件可以不存在。
    • 如果此文件不存在,则在输出的过程中自动创建此文件,并写出数据到此文件中。
    • 如果此文件存在:
      • 使用FileWriter(File file)或FileWriter(File file,false):在输出数据过程中,会新建同名的文件对现有的文件进行覆盖。
      • 使用FileWriter(File file,true):在输出数据过程中,会在现有的文件的末尾追加写出的内容。

5.FileInputStream\FileOutputStream的使用

5.1 执行步骤

  1. 第1步:创建读取或写出File类的对象。
  2. 第2步:创建输入流或输出流。
  3. 第3步:具体的读入或写出的过程。
    • 读入:read(byte[] buffer)
    • 写出:write(byte[] buffer,0,len)
  4. 第4步:关闭流,避免内存泄漏。
    /*** 需求:复制图片*/@Testpublic void test1() {FileInputStream inputStream = null;FileOutputStream outputStream = null;try {//1.创建相关的File类的对象File srcFile = new File("C:\\Users\\22923\\Desktop\\Java\\Java SE\\src\\p178\\2391e3248003e6ec91f355117ac020c.jpg");File destFile = new File("C:\\Users\\22923\\Desktop\\Java\\Java SE\\src\\p178\\1.jpg");//2.创建相关的字节流inputStream = new FileInputStream(srcFile);outputStream = new FileOutputStream(destFile);//3.数据的读入和写出byte[] buffer = new byte[1024];int len;    //记录每次读入到buffer中字节的个数while ((len = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {try {//4.关闭流资源if (outputStream != null)outputStream.close();} catch (IOException e) {e.printStackTrace();}try {//4.关闭流资源if (inputStream != null)inputStream.close();} catch (IOException e) {e.printStackTrace();}}}

5.2 注意点

  1. 涉及到流资源的关闭操作,所以出现异常时,需要使用try-catch-finally方式来处理异常。
  2. 对于输入流来说,要求File类的对象对应的物理磁盘上的文件必须存在,否则会报FileNotFoundException。
  3. 对于输出流来说,File类的对象对应物理磁盘上的文件可以不存在。
    • 如果此文件不存在,则在输出的过程中自动创建此文件,并写出数据到此文件中。
    • 如果此文件存在:
      • 使用FileWriter(File file)或FileWriter(File file,false):在输出数据过程中,会新建同名的文件对现有的文件进行覆盖。
      • 使用FileWriter(File file,true):在输出数据过程中,会在现有的文件的末尾追加写出的内容。
  4. 字符流只能用来操作文本文件,不能用来处理非文本文件。
  5. 字节流通常用来处理非文本文件。但涉及到文本文件的复制操作也可以使用字节流。

5.3 说明

  1. 文本文件:txt、.java、.c 、.cpp、.py等
  2. 非文本文件:.doc、.xls、.jpg、.pdf、.mp3等

6.缓冲流

6.1 介绍

  1. BufferedInputStream
  2. BufferedOuputStream
  3. BufferedReader
  4. BufferedWriter

6.2 缓冲流的作用

提升文件读写的效率。

6.3 使用方法

6.3.1 处理非文本文件的字节流

  1. BufferedInputStream:read(byte[] buffer)
  2. BufferedOuputStream:write(byte[] buffer,0,len)

6.3.2 处理文本文件的字符流

  1. BufferedReader:read(char[] cBuffer)/readLine()
  2. BufferedWriter:write(char[] cBuffer,0,len)

6.4 执行步骤

  1. 创建File对象、流的对象(包括文件流、缓冲流)。
  2. 使用缓冲流实现读取数据或写出数据的过程:
    • 读取:int read(char[] cbuf/byte[] buffer):每次将数据读入到cbuf/buffer数组中,并返回读入到数组中。
    • 写出:
      • void write(String str)/write(char[] cbuf):将str或cbuf写出到文件中。
      • void write(byte[] buffer):将byte[]写出到文件中。
  3. 关闭资源。
    /*** 使用BufferedInputStream\BufferedOutputStream复制文件*/@Testpublic void test1() {BufferedInputStream bufferedInputStream = null;BufferedOutputStream bufferedOutputStream = null;try {//1.创建相关的File类的对象File srcFile = new File("C:\\Users\\22923\\Desktop\\Java\\Java SE\\src\\p178\\2391e3248003e6ec91f355117ac020c.jpg");File destFile = new File("C:\\Users\\22923\\Desktop\\Java\\Java SE\\src\\p178\\1.jpg");//2.创建相关的字节流、缓冲流FileInputStream inputStream = new FileInputStream(srcFile);FileOutputStream outputStream = new FileOutputStream(destFile);bufferedInputStream = new BufferedInputStream(inputStream);bufferedOutputStream = new BufferedOutputStream(outputStream);//3.数据的读入和写出byte[] buffer = new byte[1024];int len;    //记录每次读入到buffer中字节的个数while ((len = bufferedInputStream.read(buffer)) != -1) {bufferedOutputStream.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {//4.关闭外层缓冲流资源。//由于关闭外层流时会自动对内层流执行关闭操作,所以可以省略关闭内层流的操作try {if (bufferedOutputStream != null)bufferedOutputStream.close();} catch (IOException e) {e.printStackTrace();}try {if (bufferedInputStream != null)bufferedInputStream.close();} catch (IOException e) {e.printStackTrace();}}}
    /*** 使用BufferedReader和BufferedWriter完成文本文件的复制*/@Testpublic void test2() {BufferedReader bufferedReader = null;BufferedWriter bufferedWriter = null;try {File file1 = new File("hello.txt");File file2 = new File("hello——copy.txt");bufferedReader = new BufferedReader(new FileReader(file1));bufferedWriter = new BufferedWriter(new FileWriter(file2));String data;while ((data = bufferedReader.readLine()) != null){bufferedWriter.write(data);bufferedWriter.newLine();   //换行操作bufferedWriter.flush(); //刷新方法,每当调用此方法时,会主动将内存中数据写出到磁盘文件中}} catch (IOException e) {e.printStackTrace();} finally {try {if (bufferedReader != null)bufferedReader.close();} catch (IOException e) {e.printStackTrace();}try {if (bufferedWriter != null)bufferedWriter.close();} catch (IOException e) {e.printStackTrace();}}}

7.转换流

其作用是实现字节与字符之间的转换。
在这里插入图片描述

7.1 InputStreamReader与OutputStreamWriter

  1. InputStreamReader:将一个输入型的字节流转换为输入型的字符流。
  2. OutputStreamWriter:将一个输出型的字符流转换为输出型的字节流。
    @Testpublic void test2() {FileOutputStream fos = null;OutputStreamWriter oos = null;try {File file1 = new File("hello.txt");File file2 = new File("hello_utf8.txt");FileInputStream fis = new FileInputStream(file1);InputStreamReader isr = new InputStreamReader(fis, "GBK");fos = new FileOutputStream(file2);oos = new OutputStreamWriter(fos, "utf8");char[] cBuffer = new char[1024];int len;while ((len = isr.read()) != -1) {oos.write(cBuffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {try {if (oos != null) {oos.close();}} catch (IOException e) {e.printStackTrace();}try {if (fos != null) {fos.close();}} catch (IOException e) {e.printStackTrace();}}}

7.2 字符集

7.2.1 在存储文件中的字符

  1. ASCII:主要用来存储a、b、c等英文字符和1、2、3、常用的标点符号。
  2. iso-8859-1:了解,每个字符占用1个字节。向下兼容ascii。
  3. GBK:用来存储中文简体繁体、a、b、c等英文字符和1、2、3、常用的标点符号等字符。
  4. UTF-8:可以用来存储世界范围内主要的语言的所有的字符。使用1-4个不等的字节表示一个字符。中文字符使用3个字节存储的。向下兼容ascii,意味着英文字符、1、2、3、标点符号仍使用1个字节。

7.2.2 在内存中的字符

一个字符(char)占用2个字节。在内存中使用的字符集称为Unicode字符集。

8.数据流和对象流

8.1 数据流

  1. DataOutputstream:可以将内存中的基本数据类型的变量、String类型的变量写出到具体的文行中。
  2. DataInputStream:将文件中保存的数据还原为内存中的基本数据类型的变量、String类型的变量。

8.2 对象流

8.2.1 API

  1. ObjectInputStream
  2. ObjectOutputStream

8.2.2 作用

可以读写基本数据类型的变量和引用数据类型的变量。

8.3 对象的序列化机制

对象序列化机制允许把内存中的 Java 对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。

8.3.1 序列化的意义

8.3.2 序列化过程

使用ObjectOutputStream实现,将内存中的Java对象保存在文件中或通过网络传输出去。

    /*** 序列化过程** @throws IOException*/@Testpublic void test1() throws IOException {File file = new File("hello.txt");ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));oos.writeUTF("hello");oos.close();}

8.3.3 反序列化过程

使用ObjectInputStream实现,将文件中的数据或网络传输过来的数据还原为内存的Java对象。

    /*** 反序列化过程** @throws IOException*/@Testpublic void test2() throws IOException {File file = new File("hello.txt");ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));String str1 = ois.readUTF();System.out.println(str1);ois.close();}

8.3.4 自定义类实现序列化机制的要求

  1. 自定义类需要实现接口:Serializable。
  2. 要求自定义类声明一个全局常量:static final long serialVersionUID=42234234L;用来唯一标识当前类。
  3. 如果不声明全局常量serialVersionUID,系统会自动声明一个针对于当前类的serialVersionUID。但是修改此类时,会导致serialVersionUID变化,进而导致反序列化时,出现InvaliedClassException异常。
  4. 要求自定义类的各个属性也必须可序列化:
    • 对于基本数据类型的属性,默认可以序列化。
    • 对于引用数据类型的属性,要求实现Serializable接口。
  5. 类中的属性如果声明为transient或static,则不会实现序列化。

9.其他流

9.1 标准输入、输出流

  1. System.in:标准的输入流,默认从键盘输入。
  2. System.out:标准的输出流,默认从显示器(控制台)输出。
  3. 通过调用如下方法,修改输入流和输出流的位置:
    • setIn(InputStream is)
    • setOut(PrintStream ps)

9.2 打印流

  1. 实现将基本数据类型的数据格式转化为字符串输出。
  2. 打印流:PrintStream 和 PrintWriter。

9.3 apache-common包的使用

IO 技术开发中,代码量很大,而且代码的重复率较高,为此 Apache 软件基金会,开发了 IO 技术的工具类 commonsIO,大大简化了 IO 开发。

相关文章:

Day15——File类与IO流

1.java.io.File类的使用 1.1 File类的理解 File 类及本章下的各种流&#xff0c;都定义在 java.io 包下。一个 File 对象代表硬盘或网络中可能存在的一个文件或者文件目录&#xff08;俗称文件夹&#xff09;&#xff0c;与平台无关。&#xff08;体会万事万物皆对象&#xf…...

【Qt】QLineEdit显示输入十六进制,位数不足时按照规则填充显示及每两个字符以空格填充

问题 在实际开发中&#xff0c;有时候需要对输入进行限制&#xff0c;一是更加合理&#xff0c;二是防止出现误操作。 比如&#xff1a; 使用Qt进行应用程序开发时&#xff0c;对单行编辑框QLineEdit控件&#xff0c;设置只可输入十六进制。 限制输入的方式常用且经典的是使用…...

GPT 中文提示词技巧:参照 OpenAI 官方教程

前言 搜了半天什么 prompt engineering 的课&#xff0c;最后会发现 gpt 官方其实是有 prompt 教程的。因此本文主要是学习这篇教程。 概述 - OpenAI API 部分案例是参考&#xff1a;根据吴恩达老师教程总结出中文版prompt教程_哔哩哔哩_bilibili up主的内容。 一、尽可能清…...

原生微信小程序将字符串生成二维码图片

weapp-qrcode.js再最后 inde.ts中的内容 // pages/qrCode/index.ts // 引入weapp-qrcode.js文件 var QRCode require(../../utils/weapp-qrcode) Page({/*** 页面的初始数据*/data: {orderNo:"",imagePath:},/*** 生命周期函数--监听页面加载*/onLoad(options:any)…...

深入理解HTTPS加密协议

在现代网络环境中&#xff0c;数据安全和隐私保护至关重要。HTTPS&#xff08;全称为HyperText Transfer Protocol Secure&#xff09;是一种用于保障互联网通信安全的加密协议&#xff0c;它通过在HTTP协议的基础上添加SSL/TLS层来实现对数据的加密传输。本文将详细介绍HTTPS的…...

路径规划之PRM算法

系列文章目录 路径规划之Dijkstra算法 路径规划之Best-First Search算法 路径规划之A *算法 路径规划之D *算法 路径规划之PRM算法 路径规划之PRM算法 系列文章目录前言一、前期准备1.栅格地图2.采样3.路标 二、PRM算法1.起源2.流程3. 优缺点4. 实际效果 前言 之前提到的几种…...

深入理解数据在内存中是如何存储的,位移操作符如何使用(能看懂文字就能明白系列)文章超长,慢慢品尝

系列文章目录 C语言笔记专栏 能看懂文字就能明白系列 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言引子一、2进制和进制转化为什么…...

ArcGIS提示当前许可不支持影像服务器

1、问题&#xff1a; 在用ArcGIS上处理影像栅格数据时&#xff08;比如栅格数据集裁剪、镶嵌数据集构建镶嵌线等&#xff09;经常会出现。 无法启动配置 RasterComander.ImageServer <详信息 在计算机XXXXX上创建服务器对象实例失败 当前许可不支持影像服务器。 ArcGIS提示当…...

Android P 9.0 增加以太网静态IP功能

效果图 一、Settings添加以太网的配置&#xff1a; 1、vendor\mediatek\proprietary\packages\apps\MtkSettings\res\xml\network_and_internet.xml <com.android.settingslib.RestrictedPreferenceandroid:key"ethernet_settings"android:title"string/et…...

Android12之MediaCodec硬编解码调试手段(四十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…...

2.Ansible的copy模块,我最常用的模块

1. 简述 先从我自身的情况来说&#xff0c;我不是运维人员&#xff0c;并且对linux操作也不是特别熟悉&#xff0c;所以工作中我使用ansible基本就是在平常的自动化部署中&#xff0c;而使用最多的模块就是copy模块。我使用copy模块也主要是来替换生产环境的配置文件。所以&am…...

python程序将部分文件复制到指定目录

geotools-28.2中的lib一共有264个jar包&#xff0c;但我只想将部分100个左右jar包引导我的环境中&#xff0c;那个就需要从目录中找出想要的那100个jar&#xff0c;手动挑选太费时间&#xff0c;我简单的写了个小脚本来实现。 我将想要的jar文件名和路径存放到txt中&#xff0…...

5分钟教你利用服务器,打造1个 7*24H直播的直播间

最近在折腾无人直播。觉得还挺有意思&#xff0c;接下来就分享一下如何实现。实现后就可以给一些主流的平台直播间不间断推流&#xff0c;达到无人直播的效果。 前提&#xff1a;拥有一台服务器。最好流量是1T或者以上。直播对流量要求比较高&#xff0c;视频码率越大&#xff…...

卡通渲染总结《二》

关于技术的方面&#xff0c;一方面就是其轮廓边缘检测&#xff1a; 主要的方法可以被分为基于图片空间和对象空间&#xff0c;对象空间比图片空间会多一些立体坐标位置的信息。 轮廓类型分类 首先我们顶一下轮廓是什么&#xff0c;从一个视角看去如果一条边相邻的两个面其恰…...

严蔚敏数据结构p17(2.19)——p18(2.24) (c语言代码实现)

目录 2.19已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于 mink 且小于 maxk 的元素(若表中存在这样的元素&#xff09;同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink 和 maxk 是给定的个参变量,它们的值可以和表…...

0007Java程序设计-ssm基于微信小程序的在线考试系统

文章目录 **摘要**目 录系统实现开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘要 网络技术的快速发展给各行各业带来了很大的突破&#xff0c;也给各行各业提供了一种新的管理技术&#xff0c;基于微信小程序的在线考试…...

php 使用多线程

fpm cli socket redis PHP多线程-阿里云开发者社区 常驻内存&#xff1a;op cli EasyTask: PHP常驻内存多进程任务管理器&#xff0c;支持定时任务(PHP resident memory multi-process task manager, supports timing tasks) 协程&#xff1a;swoole Swoole - PHP 协…...

基于MapBox的方法封装及调用

目录 1、初始化地图 2、单独添加瓦片 3、开启绘制方法 4、移除绘制数据 5、拾取经纬度 6、加点 7、加线 8、加面 9、更改图层顺序 10、更改实体样式 11、移除实体或图层 12、定位某个点 13、定位数组 14、锁定实体跟随视角 15、获取视窗 16、设置俯仰角 17、设…...

华为OD机试真题-虚拟游戏理财-2023年OD统一考试(C卷)

题目描述: 在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。现有一家Bank,它提供有若干理财产品m,风险及投资回报不同,你有N(元)进行投资,能接受的总风险值为X。 你要在可接受范围内选择最优的投资方式获得最大回报。 说明: 在虚拟游戏中…...

解决 video.js ios 播放一会行一会不行

最近用video 进行m3u8视频文件播放&#xff0c;但是途中遇到了 安卓和电脑端都能打开&#xff0c;ios有时可以播放有时播放不了 出现问题原因&#xff1a; ios拿到视频流前需要预加载视频&#xff0c;如果当前视频流还没有打开过&#xff0c;ios拿不到视频流的缓存&#xff0c;…...

排序分析(Ordination analysis)及R实现

在生态学、统计学和生物学等领域&#xff0c;排序分析是一种用于探索和展示数据结构的多元统计技术。这种分析方法通过将多维数据集中的样本或变量映射到低维空间&#xff0c;以便更容易理解和可视化数据之间的关系。排序分析常用于研究物种组成、生态系统结构等生态学和生物学…...

Tomcat主配置文件(server.xml)详解

前言 Tomcat主配置文件&#xff08;server.xml&#xff09;是Tomcat服务器的主要配置文件&#xff0c;文件位置在conf目录下&#xff0c;它包含了Tomcat的全局配置信息&#xff0c;包括监听端口、虚拟主机、安全配置、连接器等。 目录 1 server.xml组件类别 2 组件介绍 3 se…...

Python实现简单的区块链,实现共识算法、Merkle Tree(默克尔树)、冲突解决、添加交易等功能

Python实现简单的区块链 记录自己假期所学相关内容 文章中的内容&#xff0c;开源代码地址见文末。 文章目录 Python实现简单的区块链1、分模块实现简单的单节点区块链1.1 Transaction类1.2 DaDaMessage类1.3 Block类1.4 Dada_BlockCoin类1.5 主函数BlockChainApp类1.6 主函数…...

深入理解 Java 虚拟机(JVM)从入门到精通

目录 一、JVM内存结构1、堆&#xff08;Heap&#xff09;&#xff08;1&#xff09;特点&#xff08;2&#xff09;堆内存分配&#xff08;3&#xff09;晋升到老年代的方式&#xff08;4&#xff09;堆内存检验方式2、虚拟机栈&#xff08;VM Stack&#xff09;&#xff08;1&…...

哔哩哔哩自动评论软件,其成果展示与开发流程和代码分享

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、背景介绍 随着互联网的发展&#xff0c;哔哩哔哩作为国内最大的弹幕视频网站之一&#xff0c;吸引了越来越多的用户。为了更好地推广自己的作品&#xff0c;许多UP主希望能够通…...

Qt OpenCV 学习(一):环境搭建

对应版本 Qt 5.15.2OpenCV 3.4.9MinGW 8.1.0 32-bit 1. OpenCV 下载 确保安装 Qt 时勾选了 MinGW 编译器 本文使用 MinGW 编译好的 OpenCV 库&#xff0c;无需自行编译 确保下载的 MinGW 和上述安装 Qt 时勾选的 MinGW 编译器位数一致&#xff0c;此处均为 x86/32-bit下载地址…...

Redis——某马点评day02——商铺缓存

什么是缓存 添加Redis缓存 添加商铺缓存 Controller层中 /*** 根据id查询商铺信息* param id 商铺id* return 商铺详情数据*/GetMapping("/{id}")public Result queryShopById(PathVariable("id") Long id) {return shopService.queryById(id);} Service…...

prometheus|云原生|轻型日志收集系统loki+promtail的部署说明

一&#xff0c; 日志聚合的概念说明 日志------ 每一个程序&#xff0c;服务都应该有保留日志&#xff0c;日志的作用第一是记录程序运行的情况&#xff0c;在出错的时候能够记录错误情况&#xff0c;简单来说就是审计工作&#xff0c;例如nginx服务的日志&#xff0c;kuber…...

MySQL 临时数据空间不足导致SQL被killed 的问题与扩展

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共1730人左右 1 2 3 4 5&#xff0…...

文心一言大模型应用开发入门

本文重点介绍百度智能云平台、文心一言、千帆大模型平台的基本使用与接入流程及其详细步骤。 注册文心一言 请登录文心一言官方网站 https://yiyan.baidu.com/welcome 点击登录&#xff1b;图示如下&#xff1a; 请注册文心一言账号并点击登录&#xff0c;图示如下&#xff1…...

C++新经典模板与泛型编程:SFINAE替换失败并不是一个错误

替换失败并不是一个错误&#xff08;SFINAE&#xff09; SFINAE是一个英文简称&#xff0c;全称为Substitution Failure is not an Error&#xff0c;翻译成中文就是“替换失败并不是一个错误”。 SFINAE可以看作C语言的一种特性或模板设计中要遵循的一个重要原则&#xff0c;…...

基于若依的ruoyi-nbcio流程管理系统支持支持定时边界事件和定时捕获事件

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 1、定时边界事件 <template><div class"panel-tab__content"><!--目前只处理定…...

递归-极其优雅的问题解决方法(Java)

递归的定义 大名鼎鼎的递归&#xff0c;相信你即使没接触过也或多或少听过&#xff0c;例如汉诺塔问题就是运用了递归的思想&#xff0c;对于一些学过c语言的同学来说&#xff0c;它可能就是噩梦&#xff0c;因为我当时就是这么认为的&#xff08;不接受反驳doge&#xff09; …...

VSCode搭建STM32开发环境

1、下载安装文件 链接&#xff1a;https://pan.baidu.com/s/1WnpDTgYBobiZaXh80pn5FQ 2、安装VSCodeUserSetup-x64-1.78.2.exe软件 3、 在VSCode中安装必要的插件 3、配置Keil Assistant插件 4、在环境变量中部署mingw64编译环境...

解决CentOS下PHP system命令unoconv转PDF提示“Unable to connect or start own listener“

centos系统下&#xff0c;用php的system命令unoconv把word转pdf时提示Unable to connect or start own listene的解决办法 unoconv -o /foo/bar/public_html/upload/ -f pdf /foo/bar/public_html/upload/test.docx 2>&1 上面这个命令在shell 终端能执行成功&#xff0c…...

软件测试外包干了2个月,技术进步2年。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;18年通过校招进入北京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…...

Linux-网络服务和端口

域名&#xff1a;便于人们记忆和使用的标识符 www.baidu.com域名解析&#xff1a;将域名转换为与之对应的 IP 地址的过程 nameserver 8.8.8.8ip地址&#xff1a;网络设备的唯一数字标识符 域名ip地址localhost127.0.0.1 网络服务和端口 网络服务端口ftp21ssh22http80https…...

Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)读书笔记 目录

完结状态&#xff1a;未完结 文章目录 前言第1章 Kubernetes入门 11.1 了解Kubernetes 2 附录A Kubernetes核心服务配置详解 915总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; Kubernetes权威指南&#xff1a;从Docker到Kubernetes实践全接触&…...

阿里云Arthas使用——通过watch命令查看类的返回值 捞数据出来

前言 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类…...

Redis中持久化策略RDB与AOF优缺点对比

Redis持久化策略对比 RDBAOF持久化方式定时对整个内存做快照记录每一次执行的命令数据完整性不完整,两次备份之间存在丢失相对完整,取决于刷盘策略文件大小会有压缩,文件体积小记录命令,文件体积较大宕机恢复速度很快慢数据恢复优先级低,数据完整性不如AOF高,记录了执行命令数据…...

通用plantuml 时序图(Sequence Diagram)模板头

通用plantuml文件 startuml participant Admin order 0 #87CEFA // 参与者、顺序、颜色 participant Student order 1 #87CEFA participant Teacher order 2 #87CEFA participant TestPlayer order 3 #87CEFA participant Class order 4 #87CEFA participant Subject order …...

Domino多Web站点托管

大家好&#xff0c;才是真的好。 看到一篇文档&#xff0c;大概讲述的是他在家里架了一台Domino服务器&#xff0c;上面跑了好几个Internet的Web网站&#xff08;使用Internet站点&#xff09;。再租了一台云服务器&#xff0c;上面安装Nginx做了反向代理&#xff0c;代理访问…...

防火墙补充NAT

目录 1.iptables保存规则 2.自定义链 3.NAT NAT的实现分为下面类型&#xff1a; SNAT实验操作 DNAT实验操作 1.iptables保存规则 永久保存方法一&#xff1a; iptables -save > /data/iptables_rule //输出重定向备份 iptables -restore < /data/iptables_r…...

配置和管理VLAN

VLAN技术是交换技术的重要组成部分&#xff0c;也是交换机配置的基础。用于把物理上直接相连的网络从逻辑上划分为多个子网。 每一个VLAN 对应一个广播域&#xff0c;处于不同VLAN 上的主机不能通信。 不同VLAN 之间通信需要引入三层交换技术。 对性能局域网的配置和管理主要…...

dtaidistance笔记:dtw_ndim (高维时间序列之间的DTW)

1 数据 第一个维度是sequence的index&#xff0c;每一行是多个元素&#xff08;表示这一时刻的record&#xff09; from dtaidistance.dtw_ndim import *s1 np.array([[0, 0],[0, 1],[2, 1],[0, 1],[0, 0]], dtypenp.double) s2 np.array([[0, 0],[2, 1],[0, 1],[0, .5],[0…...

2 文本分类入门:TextCNN

论文链接&#xff1a;https://arxiv.org/pdf/1408.5882.pdf TextCNN 是一种用于文本分类的卷积神经网络模型。它在卷积神经网络的基础上进行了一些修改&#xff0c;以适应文本数据的特点。 TextCNN 的主要思想是使用一维卷积层来提取文本中的局部特征&#xff0c;并通过池化操…...

算法初阶双指针+C语言期末考试之编程题加强训练

双指针 常⻅的双指针有两种形式&#xff0c;⼀种是对撞指针&#xff0c;⼀种是左右指针。 对撞指针&#xff1a;⼀般⽤于顺序结构中&#xff0c;也称左右指针。 • 对撞指针从两端向中间移动。⼀个指针从最左端开始&#xff0c;另⼀个从最右端开始&#xff0c;然后逐渐往中间逼…...

【Spark基础】-- 宽窄依赖

目录 1、前言 2、宽窄依赖 2.1 窄依赖 2.2 宽依赖 3、宽窄转换的算子 1、前言 要理解宽窄依赖,首先我们需要了解 Transform...

Spatial Data Analysis(六):空间优化问题

Spatial Data Analysis&#xff08;六&#xff09;&#xff1a;空间优化问题 使用pulp库解决空间优化问题&#xff1a; pulp是一个用于优化问题的Python库。它包含了多种优化算法和工具&#xff0c;可以用于线性规划、混合整数线性规划、非线性规划等问题。Pulp提供了一个简单…...

PHP短信接口防刷防轰炸多重解决方案三(可正式使用)

短信接口盗刷轰炸&#xff1a;指的是黑客利用非法手段获取短信接口的访问权限&#xff0c;然后使用该接口发送大量垃圾短信给目标用户 短信验证码轰炸解决方案一(验证码类解决)-CSDN博客 短信验证码轰炸解决方案二(防止海外ip、限制ip、限制手机号次数解决)-CSDN博客 PHP短信…...