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

Java入坑之IO操作

 

目录

 

一、IO流的概念

二、字节流

 2.1InputStream的方法

2.2Outputstream的方法

2.3资源对象的关闭:

2.4transferTo()方法

2.5readAllBytes() 方法

2.6BufferedReader 和 InputStreamReader 

2.7BufferedWriter 和 OutputStreamWriter 

三、路径:

3.1Path接口:

3.2 Files工具类

3.2.1Checking a File or Directory

3.2.2Creating a Directory

3.2.3Creating a File

2.3.4Copying a File or Directory

2.3.5Moving a File or Directory

 2.3.6Deleting a File or Directory

2.3.7指定路径的遍历(Files的方法):

2.3.8需求:在指定目录下,将指定名称文件全部删除

2.3.9需求:删除指定的,包含文件/目录的整个文件目录

2.3.10需求:按字符串,读取指定文本文件中的内容


一、IO流的概念

  • IO流,将不同的输入输出,以相同的方式操作read(),write();创建不同类型的流,有不同的实现方式,不同类型的流,又有各自特有的操作方式。
  • 无论内部如何工作,所有IO流呈现的都是相同的,简单的模式,程序中流入或流出的一系列数据。

流的类型:

根据流包含的数据,可以将其分类为:

  • 字节流

  • 字符流

二、字节流

InputStream和OutputStream是Java中两个基础的抽象类,它们分别代表字节输入流和字节输出流。InputStream是所有字节输入流的超类,它定义了读取字节数据的基本方法。OutputStream是所有字节输出流的超类,它定义了写入字节数据的基本方法。

 2.1InputStream的方法

  • read() - 从输入流中读取一个字节的数据

  • read(byte[] array) - 从流中读取字节并存储在指定的数组中

  • available() - 返回输入流中可用的字节数

  • close() - 关闭输入流

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Main {public static void main(String[] args) {getByteStreams();}public static void getByteStreams() {// 使用try-with-resources语句来创建输入流和输出流try (FileInputStream in = new FileInputStream("D:/桌面/in.txt");FileOutputStream out = new FileOutputStream("D:/桌面/out.txt")){// 定义一个字节数组,用于存储从输入流中读取的数据byte[] buffer = new byte[1024];int bytesRead;// 获取输入流中可用的字节数int availableBytes = in.available();System.out.println("输入流中可用的字节数:" + availableBytes);// 从输入流中读取数据,直到读取完毕while ((bytesRead = in.read(buffer)) != -1) {// 将读取到的数据转换为字符串并打印出来String data = new String(buffer, 0, bytesRead);System.out.print(data);out.write(buffer, 0, bytesRead);}} catch (IOException e) {e.printStackTrace();}}
}

2.2Outputstream的方法

  • write() - 将指定的字节写入输出流

  • write(byte[] array) - 将指定数组中的字节写入输出流

  • close() - 关闭输出流

使用没有指定字节数组起始位置的write()方法

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Main {public static void main(String[] args) {getByteStreams();}public static void getByteStreams() {// 使用try-with-resources语句来创建输入流和输出流try (FileInputStream in = new FileInputStream("D:/桌面/in.txt");FileOutputStream out = new FileOutputStream("D:/桌面/out.txt")){// 定义一个字节数组,用于存储从输入流中读取的数据byte[] buffer = new byte[1024];int bytesRead;// 从输入流中读取数据,直到读取完毕while ((bytesRead = in.read(buffer)) != -1) {// 将读取到的数据写入到输出流中out.write(buffer);}} catch (IOException e) {e.printStackTrace();}}
}

2.3资源对象的关闭:

  • 资源文件的关闭:资源文件,比如IO流不会像其他对象,因失去引用而自动释放占用的资源,因此,必须被正确的关闭,否则会导致内存的溢出,以IO流为例,为确保无论是否出现异常,资源均被关闭,应在finally块中手动关闭资源,但这样会让程序中有大量的冗余 ;

  • 解决办法:引入java.lang.AutoCloseable接口,任何实现AutoCloseable接口的类型,均是支持自动关闭的资源类型。然后采用try-with-resources,在try语句中,声明需要关闭的资源,从而保证,无论try块是否引发异常,资源在try块结束后自动关闭(Java7) ;

  • java.io.Closeable接口继承AutoCloseable接口。原全部需要手动调用close()方法关闭的资源,全部支持try-with-resources自动关闭。

    try-with-resources语句,极大的简化了资源处理代码,使开发者无需关心资源状态,无需关心资源对象的创建顺序,无需关心资源对象的正确关闭方式

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Main {public static void main(String[] args) {getByteStreams();}public static void getByteStreams() {// 使用try-with-resources语句来创建输入流和输出流try (FileInputStream in = new FileInputStream("D:/桌面/in.txt");FileOutputStream out = new FileOutputStream("D:/桌面/out.txt")) {int c;while ((c = in.read()) != -1) {System.out.println("读取字节的10进制整数:" + c);out.write(c);}} catch (IOException e) {e.printStackTrace();}}
}
  • 注意:

    (1)资源的自动关闭,与异常无关。异常改怎么处理依然怎么处理。

    (2)在try语句中声明使用资源后,执行顺序:

    • ​​​​无异常,在try块执行后,自动关闭资源,finally块

    • 有异常,自动关闭资源,catch块,finally块

2.4transferTo()方法

transferTo()方法是Java 9中引入的一个新方法,它允许你直接将InputStream中的数据传输到指定的OutputStream中。这个方法返回传输的字节数。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Main {public static void main(String[] args) {getByteStreams();}public static void getByteStreams() {// 使用 try-with-resources 语句来创建输入流和输出流try  (FileInputStream in = new FileInputStream("D:/桌面/in.txt");FileOutputStream out = new FileOutputStream("D:/桌面/out.txt")) {// 使用 transferTo 方法将输入流的内容传输到输出流中,并获取传输的字节数long transferredBytes = in.transferTo(out);// 输出传输的字节数System.out.println("Transferred bytes: " + transferredBytes);} catch (IOException e) {e.printStackTrace();}}
}

2.5readAllBytes() 方法

readAllBytes() 是 Java 9 中 InputStream 类的另一个新方法。它允许您一次性读取输入流中的所有字节,并将它们存储在一个字节数组中。这个方法非常适用于读取小文件,但对于大文件可能会导致内存不足的问题。

import java.io.FileInputStream;
import java.io.IOException;public class Main {public static void main(String[] args) {readAllBytes();}public static void readAllBytes() {// 使用 try-with-resources 语句来创建输入流try (FileInputStream in = new FileInputStream("D:/桌面/in.txt")) {// 使用 readAllBytes 方法一次性读取输入流中的所有字节byte[] data = in.readAllBytes();// 输出读取到的数据System.out.println(new String(data));} catch (IOException e) {e.printStackTrace();}}
}

2.6BufferedReader 和 InputStreamReader 

BufferedReader 和 InputStreamReader 都是 Java 中用于从字符输入流中读取文本的类。它们都基于缓冲区来提高读取性能。

InputStreamReader 是一个桥接器,它将字节输入流转换为字符输入流。它使用指定的字符集来解码字节流中的字节。

BufferedReader 则是一个包装器,它包装一个字符输入流,并为其提供缓冲功能。这样,每次读取时就不需要从底层流中读取数据,而是从缓冲区中读取,从而提高了读取性能。

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;public class Main {public static void main(String[] args) {readText();}public static void readText() {// 使用 try-with-resources 语句来创建输入流和字符输入流try (FileInputStream in = new FileInputStream("D:/桌面/in.txt");InputStreamReader reader = new InputStreamReader(in);BufferedReader bufferedReader = new BufferedReader(reader)) {// 定义一个字符串变量,用于存储从字符输入流中读取的文本String line;// 从字符输入流中读取文本,直到读取完毕while ((line = bufferedReader.readLine()) != null) {// 输出读取到的文本System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}

2.7BufferedWriter 和 OutputStreamWriter 

BufferedWriter 和 OutputStreamWriter 都是 Java 中用于将文本写入字符输出流的类。它们都基于缓冲区来提高写入性能。

OutputStreamWriter 是一个桥接器,它将字符输出流转换为字节输出流。它使用指定的字符集来编码字符流中的字符。

BufferedWriter 则是一个包装器,它包装一个字符输出流,并为其提供缓冲功能。这样,每次写入时就不需要将数据写入到底层流中,而是写入到缓冲区中,从而提高了写入性能。

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;public class Main {public static void main(String[] args) {writeText();}public static void writeText() {// 使用 try-with-resources 语句来创建输出流和字符输出流try (FileOutputStream out = new FileOutputStream("D:/桌面/out.txt");OutputStreamWriter writer = new OutputStreamWriter(out);BufferedWriter bufferedWriter = new BufferedWriter(writer)) {// 定义要写入的文本String text = "Hello, world!";// 将文本写入到字符输出流中bufferedWriter.write(text);} catch (IOException e) {e.printStackTrace();}}
}

三、路径:

  • 绝对路径,始终包含根元素和查找文件所需的完整目录列表。 例如,D:/test/a.txt。找到文件所需的所有信息都包含在路径声明中

    相对路径,例如,a.txt。没有更多信息,程序将无法访问。即,相对路径,最终也必须基于绝对路径描述。

  • 为什么用NIO:

    Java.io.File类,包含耦合了文件路径声明,以及文件操作方法的类;且是同步阻塞的

    NIO2 (java8),将文件路径与文件操作,分离;且支持异步非阻塞

    java.nio.file.Path接口,表示系统文件/目录的绝对的/相对的路径

    java.nio.file.Files工具类,包含处理文件操作的方法,包括文件的,创建,删除,复制,移动等

  • Path接口:Path代表一个不依赖于系统的文件路径。即运行在不同操作系统下,Path的具体实现不同(windows/linux),但开发者仅需面向Path描述路径,不同系统,而无需关心操作系统差异。

3.1Path接口:

Path 接口是 Java 中用于表示文件系统中的路径的接口。它是 Java 7 中引入的新特性,属于 java.nio.file 包。

Path 接口提供了许多用于操作路径的方法,例如获取文件名、获取父路径、解析相对路径等。此外,它还提供了用于检查路径是否存在、创建目录、删除文件等文件系统操作的方法。

import java.nio.file.Path;
import java.nio.file.Paths;public class Main {public static void main(String[] args) {// 使用 Paths.get 方法创建一个 Path 对象Path path = Paths.get("D:/桌面/in.txt");// 获取文件名System.out.println("File name: " + path.getFileName());// 获取父路径System.out.println("Parent: " + path.getParent());// 获取根路径System.out.println("Root: " + path.getRoot());// 解析相对路径Path newPath = path.resolve("b.txt");System.out.println("New path: " + newPath);// 使用 Path.of 方法创建一个新的 Path 对象Path anotherPath = Path.of("D:", "桌面", "c.txt");System.out.println("Another path: " + anotherPath);// 比较两个路径是否相等System.out.println("Paths are equal: " + newPath.equals(anotherPath));}
}

Files工具类

3.2 Files工具类

Files 是 Java 中用于操作文件系统的工具类。它是 Java 7 中引入的新特性,属于 java.nio.file 包。

Files 类提供了许多静态方法,用于执行文件系统操作,例如检查文件是否存在、创建目录、删除文件、复制文件等。此外,它还提供了用于读取和写入文件内容的方法。

Files方法基于Path操作

3.2.1Checking a File or Directory

  • boolean exists(Path path)/notExists(Path path),Path路径是否存在
  • Boolean isDirectory(Path path),path是否为目录
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class Main {public static void main(String[] args) {// 定义要检查的路径Path path = Paths.get("D:/桌面/in.txt");// 检查路径是否存在if (Files.exists(path)) {System.out.println("The path " + path + " exists.");} else if (Files.notExists(path)) {System.out.println("The path " + path + " does not exist.");} else {System.out.println("The existence of the path " + path + " cannot be determined.");}// 检查路径是否为目录if (Files.isDirectory(path)) {System.out.println("The path " + path + " is a directory.");} else {System.out.println("The path " + path + " is not a directory.");}}
}

3.2.2Creating a Directory

Path createDirectory(Path dir) throws IOException。目录路径已存在则异常;目录路径为多级目录,异常

Path createDirectories(Path dir) throws IOException。自动创建多级不存在目录;目录已存在,无异常

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class Main {public static void main(String[] args) {// 定义要创建的目录的路径Path singleDirPath = Paths.get("D:/桌面/新建文件夹/new_directory");Path multiDirPath = Paths.get("D:/桌面/新建文件夹/new_directory/sub_directory");// 使用createDirectory方法创建单级目录try {Files.createDirectory(singleDirPath);System.out.println("Single-level directory created successfully.");} catch (IOException e) {System.err.println("Failed to create single-level directory: " + e.getMessage());}// 使用createDirectories方法创建多级目录try {Files.createDirectories(multiDirPath);System.out.println("Multi-level directory created successfully.");} catch (IOException e) {System.err.println("Failed to create multi-level directory: " + e.getMessage());}}
}

3.2.3Creating a File

Path createFile(path) throws IOException。基于指定路径,创建文件。文件存在,异常

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class Main {public static void main(String[] args) {// 定义要创建的文件的路径Path path = Paths.get("D:/桌面/新建文件夹/new_directory/a.txt");// 创建新文件try {Files.createFile(path);System.out.println("File created successfully.");} catch (IOException e) {System.err.println("Failed to create file: " + e.getMessage());}}
}

2.3.4Copying a File or Directory

Path copy(Path source, Path target, CopyOption... options) throws IOException,将文件复制到目标文件。默认,如果文件已经存在,异常

import java.io.IOException;
import java.nio.file.CopyOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;public class Main {public static void main(String[] args) {// 定义要复制的文件的路径和目标路径Path sourcePath = Paths.get("D:/桌面/新建文件夹/new_directory/a.txt");Path targetPath = Paths.get("D:/桌面/新建文件夹/new_directory/target_file.txt");// 复制文件try {Files.copy(sourcePath, targetPath);System.out.println("File copied successfully.");} catch (IOException e) {System.err.println("Failed to copy file: " + e.getMessage());}// 使用REPLACE_EXISTING选项复制文件try {Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);System.out.println("File copied successfully with REPLACE_EXISTING option.");} catch (IOException e) {System.err.println("Failed to copy file with REPLACE_EXISTING option: " + e.getMessage());}}
}

java.nio.file.StandardCopyOption 是一个枚举类,它实现了 CopyOption 接口,定义了标准的复制选项。它有三个枚举常量:ATOMIC_MOVE,COPY_ATTRIBUTES 和 REPLACE_EXISTING。

  • ATOMIC_MOVE: 以原子文件系统操作的方式移动文件。
  • COPY_ATTRIBUTES: 将属性复制到新文件。
  • REPLACE_EXISTING: 如果文件已存在,则替换它。

java.nio.file.StandardCopyOption枚举,实现了CopyOption接口,复制选项

2.3.5Moving a File or Directory

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;public class Main {public static void main(String[] args) {// 定义要移动的文件的路径和目标路径Path sourcePath = Paths.get("D:/桌面/新建文件夹/new_directory/a.txt");Path targetPath = Paths.get("D:/桌面/新建文件夹/b.txt");// 移动文件try {Files.move(sourcePath, targetPath);System.out.println("File moved successfully.");} catch (IOException e) {System.err.println("Failed to move file: " + e.getMessage());}// 使用REPLACE_EXISTING选项移动文件try {Files.move(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);System.out.println("File moved successfully with REPLACE_EXISTING option.");} catch (IOException e) {System.err.println("Failed to move file with REPLACE_EXISTING option: " + e.getMessage());}}
}

 2.3.6Deleting a File or Directory

void delete(Path path) throws IOException。删除指定路径;路径不存在,异常

boolean deleteIfExists(Path path) throws IOException。路径不存在,不删除。返回是否删除成功

如果路径为目录,目录中包含文件(即不为空),2种删除均异常

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class Main {public static void main(String[] args) {// 定义要删除的文件的路径Path path = Paths.get("D:/桌面/新建文件夹/b.txt");Path path1 = Paths.get("D:/桌面/新建文件夹/new_directory/target_file.txt");// 删除文件try {Files.delete(path);System.out.println("File deleted successfully.");} catch (IOException e) {System.err.println("Failed to delete file: " + e.getMessage());}// 使用deleteIfExists方法删除文件try {boolean deleted = Files.deleteIfExists(path1);if (deleted) {System.out.println("File deleted successfully with deleteIfExists method.");} else {System.out.println("File not found with deleteIfExists method.");}} catch (IOException e) {System.err.println("Failed to delete file with deleteIfExists method: " + e.getMessage());}}
}

2.3.7指定路径的遍历(Files的方法):

Stream<Path> walk(Path start, int maxDepth) throws IOException:遍历,基于指定深度遍历path路径中的目录和文件

Stream<Path> walk(Path start) throws IOException:遍历path路径中的所有目录和文件,包括子目录的,观察遍历时的输出顺序,按层次输出的。注意返回值是流,后面可以用流的操作,比如过滤,排序等功能。可以借助于此方法删除非空目录

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {// 定义要遍历的目录的路径Path start = Paths.get("D:/桌面");// 遍历目录try (Stream<Path> stream = Files.walk(start)) {stream.forEach(System.out::println);} catch (IOException e) {System.err.println("Failed to walk directory: " + e.getMessage());}}
}
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {// 定义要遍历的目录的路径Path start = Paths.get("D:/桌面");// 遍历目录try (Stream<Path> stream = Files.walk(start, 1)) {stream.forEach(System.out::println);} catch (IOException e) {System.err.println("Failed to walk directory: " + e.getMessage());}}
}

2.3.8需求:在指定目录下,将指定名称文件全部删除

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {// 定义要遍历的目录的路径Path start = Paths.get("D:/桌面/新建文件夹/new_directory");String fileName = "a.txt";// 遍历目录并删除指定名称的文件try (Stream<Path> stream = Files.walk(start)) {stream.filter(path -> path.getFileName().toString().equals(fileName)).forEach(path -> {try {Files.delete(path);System.out.println("Deleted file: " + path);} catch (IOException e) {System.err.println("Failed to delete file: " + e.getMessage());}});} catch (IOException e) {System.err.println("Failed to walk directory: " + e.getMessage());}}
}

2.3.9需求:删除指定的,包含文件/目录的整个文件目录

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Comparator;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {// 定义要删除的目录的路径Path start = Paths.get("D:/桌面/新建文件夹/new_directory");// 删除目录及其内容try (Stream<Path> stream = Files.walk(start)) {stream.sorted(Comparator.reverseOrder()).forEach(path -> {try {Files.delete(path);System.out.println("Deleted: " + path);} catch (IOException e) {System.err.println("Failed to delete: " + e.getMessage());}});} catch (IOException e) {System.err.println("Failed to walk directory: " + e.getMessage());}}
}

2.3.10需求:按字符串,读取指定文本文件中的内容

String Files.readString(path, charset) throws IOException,基于指定路径及字符集读取文本文件

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class Main {public static void main(String[] args) {// 定义要读取的文件的路径Path path = Paths.get("D:/桌面/新建文件夹/new_directory/a.txt");// 读取文件内容try {String content = Files.readString(path);System.out.println(content);} catch (IOException e) {System.err.println("Failed to read file: " + e.getMessage());}}
}

相关文章:

Java入坑之IO操作

目录 一、IO流的概念 二、字节流 2.1InputStream的方法 2.2Outputstream的方法 2.3资源对象的关闭&#xff1a; 2.4transferTo()方法 2.5readAllBytes() 方法 2.6BufferedReader 和 InputStreamReader 2.7BufferedWriter 和 OutputStreamWriter 三、路径&#xff1a;…...

校园小助手【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a; 更多系统资源库地址&#xff1a;骚戴的博客_CSDN_更多系统资源 更多系统…...

String的不可变特性

1 问题 如何理解“String是不可变的&#xff0c;但是可以变”&#xff1f; 2 方法 &#xff08;1&#xff09;String的不可变特性体现在内容和长度 首先在idea中点开查看String这个类是如何定义的 可以看到这样一行代码&#xff1a;private final char value[]; 正是因为这个数…...

使用MMDeploy(预编译包)转换MMxx(MMDeploy支持库均可)pth权重到onnx,并使用python SDK进行部署验证

MMDeploy使用python部署实践记录 准备工作空间所需环境配置使用MMDeploy得到onnx使用MMDeploy加载onnx模型对单张图片进行推理使用python SDK对onnx模型进行验证 注意 mmdeploy C SDK的使用部署和实际操作过程请看本人另外一篇博文使用MMDeploy&#xff08;预编译包&#xff09…...

Shiro安全框架简介

一、权限管理 1.1 什么是权限管理 基本上只要涉及到用户参数的系统都要进行权限管理&#xff0c;使用权限管理实现了对用户访问系统的控制&#xff0c;不同的用户访问不同的资源。按照安全规则或者安全策略控制用户访问资源&#xff0c;而且只能访问被授权的资源 权限管理包括认…...

三行Python代码,让数据处理速度提高2到6倍

本文可以教你仅使用 3 行代码&#xff0c;大大加快数据预处理的速度。 Python 是机器学习领域内的首选编程语言&#xff0c;它易于使用&#xff0c;也有很多出色的库来帮助你更快处理数据。但当我们面临大量数据时&#xff0c;一些问题就会显现…… 在默认情况下&#xff0c;…...

空间向量模长

// 空间向量模长 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char **argv) { float x, y, z; float mochang 0.0; x y z 0.0; if (argc ! 4) { printf("usage:%s x y z\n", argv[1]); …...

活动需求中灵活使用Redis提升生产力

抽奖 一堆用户参与进来&#xff0c;然后随机抽取几个幸运用户给予实物/虚拟的奖品&#xff1b;此时&#xff0c;开发人员就需要写上一个抽奖的算法&#xff0c;来实现幸运用户的抽取&#xff1b;其实我们完全可以利用Redis的集合&#xff08;Set&#xff09;&#xff0c;就能轻…...

Java知识点学习(第16天)

Innodb是如何实现事务的&#xff1f; innodb通过Buffer Pool&#xff0c;LogBuffer&#xff0c;Redo Log&#xff0c;Undo Log来实现事务&#xff0c;以一个update语句为例&#xff1a; innodb在收到一个update语句后&#xff0c;会先根据条件找到数据所在的页&#xff0c;并…...

ORA-1688: unable to extend table AUDSYS.AUD$UNIFIED

昨晚正在外滩玩&#xff0c;有个客户发过来一段报错&#xff0c;已经影响到业务了。一看就是12C以后版本才有的问题&#xff0c;&#xff0c;赶紧在手机中收到临时解决办法 报错如下 ORA-1688: unable to extend table AUDSYS.AUD$UNIFIED partition SYS_P42549 by 1024 in t…...

抖音滑块以及轨迹分析

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 我们在web端打开用户主页的时候,时不时的会出现滑…...

C#生成单色bmp图片,转为单色bmp图片 任意语言完全用字节拼一张单色图,LCD取模 其它格式图片转为单色图

最终效果&#xff1a; V1.8.2 20230419 文字生成单色BMP图片4.exe 默认1280*720 如果显示不全&#xff0c;请把宽和高加大 字体加大。 首先&#xff0c;用windows画板生成一张1*1白色单色图作为标准&#xff0c;数据如下&#xff1a; 数据解析参考&#xff1a;BMP图像文件完…...

【瑞吉外卖】002 -- 后台登录功能开发

本文章为对 黑马程序员Java项目实战《瑞吉外卖》的学习记录 目录 一、需求分析 1、页面原型展示 2、登录页面展示 3、查看登录请求信息 4、数据模型 二、代码开发 1、创建实体类Employee&#xff0c;和employee表进行映射 2、创建包结构&#xff1a;&#xff08;Controller、Se…...

【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

java IO流_1

目录 分类 字节流 InputStream OutputStream 文件拷贝 字符流 FileReader FileWriter 处理流 BufferedReader BufferedWriter 文本拷贝 流是从起源到接受的有序数据&#xff0c;通过流的方式允许程序使用相同的方式来访问不同的输入/输出源。 分类 按数据…...

【回忆 总结】我的大学四年

大学四年关键词速览 如果穿越回大一&#xff0c;你想对大一的你提什么最重要的建议&#xff1f;同样是上网课&#xff0c;我为何能比大多数同学学的更好&#xff1f;回到学校&#xff0c;我的大二似乎一帆风顺&#xff1f;在不断的迷茫和徘徊中&#xff0c;大三的我做出的决定&…...

深度解析OEKO

【深度解析OEKO】 什么是OEKO-TEX Standard 100&#xff1f; OEKO-TEX Standard 100现在是使用最为广泛的纺织品生态标志。OEKO-TEX Standard 100规定的标准是根据最新的科学知识&#xff0c;对纱线、纤维以及各类纺织品的有害物质含量规定限度。只有按照严格检测和检查程序提供…...

Golang gorm

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. 一 对多入门 比如要开发cmdb的系统&#xff0c;无论是硬件还是软件。硬件对应的就是对应的哪个开发在用。或者服务对应的是哪个业务模块在使用&#xff0c;或者应用谁在使用。那么这…...

rk3568 适配摄像头 (CIF协议)

rk3568 适配摄像头 (CIF协议) 在RK3568处理器中&#xff0c;支持CIF协议的摄像头可以通过CSI接口连接到处理器&#xff0c;实现视频数据的采集和处理。同时&#xff0c;RK3568还支持多种图像处理算法和编解码器&#xff0c;可以对采集到的视频数据进行实时处理和压缩&#xff…...

今天面试招了个25K的测试员,从腾讯出来的果然都有两把刷子···

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;前面一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在15-25k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试中&#xff0c;不…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...