Java的NIO提供了非阻塞I/O机制的包

Java的NIO(New I/O)是一种提供了替代性、非阻塞I/O机制的包。它的引入主要是为了解决传统I/O机制在处理大量连接或大数据量时所带来的性能瓶颈和可扩展性问题。下面详细介绍NIO的一些关键概念和特性:

1.通道(Channels):
NIO中引入了通道的概念,它是连接程序与文件、套接字等I/O资源的虚拟管道。通道可以用于读取和写入数据,并且通道的实现可以支持非阻塞模式,使得一个线程可以管理多个通道。
2.缓冲区(Buffers):
在NIO中,数据的读取和写入都是通过缓冲区进行的。缓冲区是一个对象,它包含了一定数量的数据,并提供了读写这些数据的方法。通过缓冲区,可以减少对底层系统的直接访问次数,从而提高了性能。
3.选择器(Selectors):
选择器是NIO提供的一种高效的多路复用机制。它可以让一个单独的线程管理多个通道的I/O操作,从而降低了线程开销。选择器会监视多个通道的事件,例如读就绪、写就绪等,并且只会在有事件发生时才唤醒线程。
4.非阻塞I/O(Non-blocking I/O):
NIO的关键特性之一是非阻塞I/O。在传统的I/O模型中,当一个线程在一个通道上进行读取或写入操作时,如果数据还没有准备好,线程会被阻塞,直到数据准备好为止。而在NIO中,可以通过设置通道为非阻塞模式,使得当数据还没有准备好时,不会阻塞线程,而是立即返回,这样线程可以继续处理其他通道。
5.文件I/O和网络I/O的统一模型:
NIO提供了一种统一的模型来处理文件I/O和网络I/O。通道、缓冲区和选择器这些核心概念在处理文件和网络时都可以使用,使得开发人员能够更方便地编写可重用的代码。

总的来说,Java的NIO提供了一种更为灵活和高效的I/O机制,特别适用于需要处理大量连接或大数据量的应用场景,例如网络服务器、消息传输系统等。通过NIO,开发人员能够更好地利用系统资源,提高应用程序的性能和可伸缩性。

--------

Java的NIO(New I/O)提供了一组类和接口来支持非阻塞I/O操作。下面是一些核心类及其方法的详细介绍:

通道相关类(Channels):
java.nio.channels.Channel:通道的基本接口,定义了通道的基本操作,如打开、关闭和判断是否打开等。常见的实现类有:
FileChannel:用于文件I/O操作的通道。
SocketChannel:用于TCP网络套接字的通道。
ServerSocketChannel:用于监听TCP连接请求的通道。
DatagramChannel:用于UDP数据报套接字的通道。
java.nio.channels.SelectableChannel:可选择通道的基本接口,扩展了Channel接口,提供了支持选择器的功能。

缓冲区相关类(Buffers):
java.nio.Buffer:缓冲区的基本抽象类,定义了缓冲区的基本操作,如读取、写入、清空、翻转等。
ByteBuffer:字节缓冲区,用于读取和写入字节数据。
CharBuffer:字符缓冲区,用于读取和写入字符数据。

ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer:分别用于读取和写入不同基本数据类型的缓冲区。

选择器相关类(Selectors):
java.nio.channels.Selector:选择器类,用于管理多个通道的事件。
Selector.open():静态方法,用于打开一个选择器。
Selector.select():阻塞方法,用于等待通道上的事件发生。
Selector.selectedKeys():返回一个包含已选择键的集合,这些键表示通道上已经准备好的I/O操作。

其他核心类:
java.nio.file.Path:路径类,用于表示文件系统中的路径。
java.nio.file.Files:文件操作类,提供了一系列静态方法来操作文件,如复制、移动、删除等。

常用方法和操作:
通道相关方法:
Channel.open():打开一个通道。
Channel.close():关闭通道。
Channel.read():从通道读取数据到缓冲区。
Channel.write():将缓冲区中的数据写入通道。
缓冲区相关方法:
Buffer.allocate(int capacity):分配一个新的缓冲区。
Buffer.clear():清空缓冲区,使其准备好写入数据。
Buffer.flip():翻转缓冲区,使其准备好读取数据。
Buffer.put():向缓冲区中写入数据。
Buffer.get():从缓冲区中读取数据。
选择器相关方法:
Selector.open():打开一个选择器。
Selector.select():阻塞方法,等待通道上的事件发生。
Selector.selectedKeys():获取已选择的键集合。
SelectableChannel.register(Selector sel, int ops):注册通道到选择器,并指定感兴趣的事件类型。
通过这些类和方法,Java的NIO提供了强大的工具来实现高效的非阻塞I/O操作,可以应用于各种场景,包括网络编程、文件操作等。

-----------

// 这段Java程序利用了Java NIO(New I/O)库进行文件操作,主要涉及了ByteBuffer、FileChannel等类。让我逐步解释每一行代码:
// 1. `RandomAccessFile file = new RandomAccessFile("example.txt", "rw");`:这行代码打开名为"example.txt"的文件,使用读写模式("rw"表示读写)创建一个RandomAccessFile对象。
// 2. `FileChannel channel = file.getChannel();`:通过RandomAccessFile对象获取文件的通道,以便后续进行读写操作。
// 3. `ByteBuffer byteBuffer = ByteBuffer.allocate(1024);`:创建一个大小为1024字节的ByteBuffer对象,用于缓存从文件中读取的数据。
// 4. `int bytesRead = channel.read(byteBuffer);`:从文件通道中读取数据到ByteBuffer中,并返回读取的字节数。
// 5. `while (bytesRead != -1) { ... }`:通过一个while循环来读取文件,条件是文件中还有未读取的数据。
// 6. `byteBuffer.flip();`:切换ByteBuffer为读取模式,准备从缓冲区中读取数据。这里是为了读取之前放入ByteBuffer的数据。
// 7. `CharBuffer charBuffer = StandardCharsets.UTF_8.decode(byteBuffer);`:将ByteBuffer中的字节数据按照UTF-8编码解码为字符,存储到CharBuffer中。
// 8. `System.out.print(charBuffer);`:将字符缓冲区中的内容打印到控制台。
// 9. `byteBuffer.clear();`:清空ByteBuffer,准备下一次读取。
// 10. `bytesRead = channel.read(byteBuffer);`:继续从文件通道中读取数据到ByteBuffer中,并更新bytesRead以判断是否已经读取到文件末尾。
// 11. `channel.close();`和`file.close();`:关闭文件通道和RandomAccessFile对象,释放资源。
// 总体而言,这段程序通过NIO库实现了从文件中读取数据并输出到控制台的功能。

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.channels.FileChannel;public class nioFileOperationWithByteBuffer {public static void main(String[] args) {try {// 打开文件RandomAccessFile file = new RandomAccessFile("example.txt", "rw");FileChannel channel = file.getChannel();// 创建一个ByteBufferByteBuffer byteBuffer = ByteBuffer.allocate(1024);// 从文件中读取数据到缓冲区int bytesRead = channel.read(byteBuffer);while (bytesRead != -1) {// 切换为读取模式byteBuffer.flip();// 将字节转换为字符CharBuffer charBuffer = StandardCharsets.UTF_8.decode(byteBuffer);// 打印字符System.out.print(charBuffer);// 清空缓冲区,准备下一次读取byteBuffer.clear();bytesRead = channel.read(byteBuffer);}// 关闭通道和文件channel.close();file.close();} catch (IOException e) {e.printStackTrace();}}
}
// 这段Java程序利用了Java NIO(New I/O)库进行文件操作,主要涉及了ByteBuffer、FileChannel等类。让我逐步解释每一行代码:
// 1. `RandomAccessFile file = new RandomAccessFile("example.txt", "rw");`:这行代码打开名为"example.txt"的文件,使用读写模式("rw"表示读写)创建一个RandomAccessFile对象。
// 2. `FileChannel channel = file.getChannel();`:通过RandomAccessFile对象获取文件的通道,以便后续进行读写操作。
// 3. `ByteBuffer byteBuffer = ByteBuffer.allocate(1024);`:创建一个大小为1024字节的ByteBuffer对象,用于缓存从文件中读取的数据。
// 4. `int bytesRead = channel.read(byteBuffer);`:从文件通道中读取数据到ByteBuffer中,并返回读取的字节数。
// 5. `while (bytesRead != -1) { ... }`:通过一个while循环来读取文件,条件是文件中还有未读取的数据。
// 6. `byteBuffer.flip();`:切换ByteBuffer为读取模式,准备从缓冲区中读取数据。这里是为了读取之前放入ByteBuffer的数据。
// 7. `CharBuffer charBuffer = StandardCharsets.UTF_8.decode(byteBuffer);`:将ByteBuffer中的字节数据按照UTF-8编码解码为字符,存储到CharBuffer中。
// 8. `System.out.print(charBuffer);`:将字符缓冲区中的内容打印到控制台。
// 9. `byteBuffer.clear();`:清空ByteBuffer,准备下一次读取。
// 10. `bytesRead = channel.read(byteBuffer);`:继续从文件通道中读取数据到ByteBuffer中,并更新bytesRead以判断是否已经读取到文件末尾。
// 11. `channel.close();`和`file.close();`:关闭文件通道和RandomAccessFile对象,释放资源。
// 总体而言,这段程序通过NIO库实现了从文件中读取数据并输出到控制台的功能。// `RandomAccessFile` 类是 Java 提供的一个用于文件操作的工具类,可以在文件中随机访问数据。它既可以读取文件的内容,也可以向文件中写入数据,并且可以随机定位文件指针到文件的任意位置进行读写操作。
// 下面是 `RandomAccessFile` 类的一些主要方法和用法:
// 1. **构造方法**:
//    - `RandomAccessFile(String name, String mode)`:根据指定的文件名和模式("r":只读,"rw":读写)创建一个 `RandomAccessFile` 对象。
// 2. **读取操作**:
//    - `int read()`:从文件中读取一个字节的数据,并返回读取到的字节数据(返回值范围在 0 到 255 之间)。
//    - `int read(byte[] b)`:从文件中读取最多 `b.length` 个字节的数据,并将其存储到字节数组 `b` 中,返回实际读取的字节数。
//    - `long getFilePointer()`:返回当前文件指针的位置,即从文件开头到当前位置的字节数。
// 3. **写入操作**:
//    - `void write(int b)`:向文件中写入一个字节的数据。
//    - `void write(byte[] b)`:将字节数组 `b` 中的数据写入到文件中。
//    - `void writeBytes(String s)`:将字符串 `s` 中的字节写入到文件中。
// 4. **定位操作**:
//    - `void seek(long pos)`:将文件指针定位到指定的位置 `pos`。
// 5. **关闭文件**:
//    - `void close()`:关闭文件流,释放资源。
// `RandomAccessFile` 类提供了比较底层的文件操作方法,可以对文件进行灵活的读写操作,但需要注意的是,在进行文件指针的定位时,需要小心确保定位的位置在文件的有效范围内。

-------------

// 代码示例中,我们使用了以下文件和字符流文件流类:
// RandomAccessFile:RandomAccessFile 类提供了对文件的随机读写访问。它既可以用于读取数据,也可以用于写入数据。与传统的输入输出流不同,RandomAccessFile 允许我们通过设置文件指针来跳转到文件的任意位置,并在该位置进行读取或写入操作。
// FileChannel:FileChannel 是 NIO(New I/O)包提供的通道类,用于高效地进行文件读写操作。通道提供了更灵活和高性能的方式来操作文件,支持异步读写、文件锁定等功能。通过 FileChannel 可以直接操作文件的内容,读取或写入字节数据。
// ByteBuffer:ByteBuffer 是 NIO 包中的一个字节缓冲区类,用于存储原始的字节数据。在文件操作中,我们通常会先将文件内容读取到 ByteBuffer 中,然后再进行相应的处理。
// CharBuffer:
CharBuffer 是 NIO 包中的一个字符缓冲区类,用于存储字符数据。在处理文本文件时,我们通常会将字节数据解码为字符数据,并存储到 CharBuffer 中。
// Charset:Charset 类表示字符编码集,用于处理字符数据和字节数据之间的转换。在文件操作中,我们经常需要指定正确的字符编码集来解码文件内容,以确保正确地读取和显示文本数据。
// 这些文件和字符流文件流类提供了多种功能和方法,使得我们能够有效地进行文件操作、数据读写和字符编解码。通过结合使用这些类,我们可以实现各种文件处理需求,并灵活地控制文件内容的读取和写入过程。

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;public class nioFileOperationWithCharBuffer {public static void main(String[] args) {try {// 打开一个随机访问文件以只读模式打开RandomAccessFile file = new RandomAccessFile("example.txt", "r");FileChannel channel = file.getChannel(); // 获取文件通道channel.position(0); // 移动文件指针到文件开头ByteBuffer byteBuffer = ByteBuffer.allocate(1024); // 创建一个字节缓冲区CharBuffer charBuffer = CharBuffer.allocate(1024); // 创建一个字符缓冲区Charset charset = StandardCharsets.UTF_8; // 指定UTF-8字符集int bytesRead;while ((bytesRead = channel.read(byteBuffer)) != -1) { // 从文件通道中读取数据到字节缓冲区byteBuffer.flip(); // 切换为读模式// 使用指定字符集将字节缓冲区的数据解码到字符缓冲区charset.newDecoder().decode(byteBuffer, charBuffer, false);charBuffer.flip(); // 准备从字符缓冲区读取数据// 逐个字符地从字符缓冲区中读取数据并输出到控制台while (charBuffer.hasRemaining()) {System.out.print(charBuffer.get());}byteBuffer.clear(); // 清空字节缓冲区,准备下一次读取charBuffer.clear(); // 清空字符缓冲区,以便下一次解码}channel.close(); // 关闭文件通道file.close(); // 关闭文件} catch (IOException e) {e.printStackTrace();}}
}
// 关键内容解读:// ByteBuffer:用于存储从文件中读取的原始字节数据。
// CharBuffer:用于存储通过解码后的字符数据。
// Charset:表示字符编码集,用于将字节数据解码为字符数据。
// StandardCharsets.UTF_8:Java标准字符集之一,表示UTF-8编码。
// channel.read(byteBuffer):从文件通道中读取数据,并将其存储到ByteBuffer中。
// charset.newDecoder().decode(byteBuffer, charBuffer, false):使用指定字符集解码ByteBuffer中的字节数据,并将结果存储到CharBuffer中。
// byteBuffer.flip() 和 charBuffer.flip():切换缓冲区为读取模式。
// charBuffer.hasRemaining() 和 charBuffer.get():循环遍历字符缓冲区,逐个字符读取并输出到控制台。
// byteBuffer.clear() 和 charBuffer.clear():清空缓冲区,以便进行下一轮读取或解码操作。// 在上面的代码示例中,我们使用了以下文件和字符流文件流类:
// RandomAccessFile:RandomAccessFile 类提供了对文件的随机读写访问。它既可以用于读取数据,也可以用于写入数据。与传统的输入输出流不同,RandomAccessFile 允许我们通过设置文件指针来跳转到文件的任意位置,并在该位置进行读取或写入操作。
// FileChannel:FileChannel 是 NIO(New I/O)包提供的通道类,用于高效地进行文件读写操作。通道提供了更灵活和高性能的方式来操作文件,支持异步读写、文件锁定等功能。通过 FileChannel 可以直接操作文件的内容,读取或写入字节数据。
// ByteBuffer:ByteBuffer 是 NIO 包中的一个字节缓冲区类,用于存储原始的字节数据。在文件操作中,我们通常会先将文件内容读取到 ByteBuffer 中,然后再进行相应的处理。
// CharBuffer: CharBuffer 是 NIO 包中的一个字符缓冲区类,用于存储字符数据。在处理文本文件时,我们通常会将字节数据解码为字符数据,并存储到 CharBuffer 中。
// Charset:Charset 类表示字符编码集,用于处理字符数据和字节数据之间的转换。在文件操作中,我们经常需要指定正确的字符编码集来解码文件内容,以确保正确地读取和显示文本数据。
// 这些文件和字符流文件流类提供了多种功能和方法,使得我们能够有效地进行文件操作、数据读写和字符编解码。通过结合使用这些类,我们可以实现各种文件处理需求,并灵活地控制文件内容的读取和写入过程。

---

// 这段示例代码涉及了java.io中的字节流和字符流,以及文件输入输出类。让我详细介绍一下涉及的各个对象:

// 1. **字节流和字符流**:
//    - `FileInputStream`:字节流输入,用于从文件中读取字节数据。
//    - `FileOutputStream`:字节流输出,用于将字节数据写入文件中。
//    - `InputStreamReader`:字符流输入,将字节流转换为字符流。它接收一个字节输入流,并将其转换为字符流。通常与`FileInputStream`一起使用。
//    - `OutputStreamWriter`:字符流输出,将字符流转换为字节流。它接收一个字节输出流,并将其转换为字符流。通常与`FileOutputStream`一起使用。

// 2. **缓冲字符流**:
//    - `BufferedReader`:缓冲字符输入流,用于提高读取文件的效率。它接收一个字符输入流,并提供了`readLine()`方法来逐行读取文件内容。
//    - `BufferedWriter`:缓冲字符输出流,用于提高向文件写入数据的效率。它接收一个字符输出流,并提供了`write()`方法来写入字符串到文件中,以及`newLine()`方法来写入换行符。

// 这些流类的组合使得文件的读取和写入变得更加高效和灵活。字符流与字节流的转换使得处理文本数据更为方便,而缓冲流则减少了IO操作的次数,从而提升了性能。

import java.io.*;public class FileIOExample {public static void main(String[] args) {try {// 文件输入示例FileInputStream fis = new FileInputStream("example.txt"); // 创建文件输入流对象,读取名为"example.txt"的文件InputStreamReader isr = new InputStreamReader(fis); // 创建字符流输入对象,将字节流转换为字符流BufferedReader br = new BufferedReader(isr); // 创建缓冲字符输入流对象,提高读取效率String line;while ((line = br.readLine()) != null) { // 逐行读取文件内容,直到文件结束System.out.println(line); // 输出每行内容到控制台}br.close(); // 关闭输入流// 文件输出示例FileOutputStream fos = new FileOutputStream("outputexample.txt"); // 创建文件输出流对象,写入到名为"outputexample.txt"的文件OutputStreamWriter osw = new OutputStreamWriter(fos); // 创建字符流输出对象,将字节流转换为字符流BufferedWriter bw = new BufferedWriter(osw); // 创建缓冲字符输出流对象,提高写入效率bw.write("Hello, world!"); // 写入字符串到文件bw.newLine(); // 写入换行符bw.write("这是中文字符。"); // 再次写入字符串到文件bw.close(); // 关闭输出流} catch (IOException e) {e.printStackTrace(); // 打印异常信息}}
}
// 这段示例代码涉及了Java中的字节流和字符流,以及文件输入输出类。让我详细介绍一下涉及的各个对象:// 1. **字节流和字符流**:
//    - `FileInputStream`:字节流输入,用于从文件中读取字节数据。
//    - `FileOutputStream`:字节流输出,用于将字节数据写入文件中。
//    - `InputStreamReader`:字符流输入,将字节流转换为字符流。它接收一个字节输入流,并将其转换为字符流。通常与`FileInputStream`一起使用。
//    - `OutputStreamWriter`:字符流输出,将字符流转换为字节流。它接收一个字节输出流,并将其转换为字符流。通常与`FileOutputStream`一起使用。// 2. **缓冲字符流**:
//    - `BufferedReader`:缓冲字符输入流,用于提高读取文件的效率。它接收一个字符输入流,并提供了`readLine()`方法来逐行读取文件内容。
//    - `BufferedWriter`:缓冲字符输出流,用于提高向文件写入数据的效率。它接收一个字符输出流,并提供了`write()`方法来写入字符串到文件中,以及`newLine()`方法来写入换行符。// 这些流类的组合使得文件的读取和写入变得更加高效和灵活。字符流与字节流的转换使得处理文本数据更为方便,而缓冲流则减少了IO操作的次数,从而提升了性能。

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

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

相关文章

管理Kubernetes平台的工具Rancher

目录 一、特性二、使用方法2.1、安装 Rancher2.2、创建 Kubernetes 集群2.3、管理和部署应用 Rancher 是一个开源的容器管理平台,它提供了企业级的 Kubernetes 管理解决方案,使得部署和管理 Kubernetes 集群变得更加简单。Rancher 提供了一个统一的控制面…

使用pyautogui制作点击器怎么输入中文

通过咨询国内一些大厂的问答软件,发现基本都是让我们使用pinyin库来输入中文,我使用了一下,很难达到我的需求,我就发现可以使用复制、粘贴这两个快捷键来达到这个效果。 它们给的代码基本都是这个模式,但是拼音和需要的…

Python 白底黑字图片去除红色水印

Python 白底黑字图片去除红色水印 import os from PIL import Imagedef remove_color(image_path, new_image_path):"""初始化:param image_path: 图片路径:param new_image_path: 新图片路径"""# 打开图片并转换为RGBA格式img Image.open(imag…

java入门1.1.2

前言: 第一:一坨垃圾的迭代,还是垃圾 第二:本内容为对类,对象,构造函数的最新抽象理解 正片 先将类,对象,还要构造函数翻译成英文 class,object,construc…

汇中 SCL-61D2超声水表汇中通讯协议

RS-485串行通讯接口设置表 通用代码注释 读取正向仪表数据 DD的内容为 通讯示例 主机命令:2A 41 4A 仪表响应:26 41 4A 00 00 13 63 00 00 07 72 00 00 10 34 00 33 读取负向仪表数据:(单向型仪表无此命令) DD的内容…

用户研究方法论中定性研究的优缺点分析

定性研究是一种探索性研究方法,它侧重于理解用户的感受、态度、动机和行为背后的原因。以下是定性研究的一些优缺点: 优点: 深入理解:定性研究能够提供对用户行为和态度的深入理解,帮助研究者捕捉到用户的真实感受和动…

selenium发展史

Selenium Core 2004 年,Thoughtworks 的工程师 Jason Huggins 正在负责一个 Web 应用的测试工作,由于这个项目需要频繁回归,这导致他不得不每天做着重复且低效的工作。为了解决这个困境,Jason 开发了一个运行在 JavaScript 沙箱中…

PDF 生成目录和页码 点击跳转(新)

为啥又写一篇&#xff1f; 因为之前 用 Anchor 写的&#xff0c;这东西 放到Paragraph 里就不好使了 。 这回 目录里 和 跳转的地方 用的都是 Chunk 添加 目录条目 返回跳转的标记 public String addMenuTag (List<Pair<Chunk, String>> chunks, String[] men…

代码随想录算法训练营第二十九天| LeetCode491.递增子序列* 、LeetCode46.全排列*、LeetCode47.全排列 II

#LeetCode 491. Non-decreasing Subsequences #LeetCode 491. 视频讲解&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bilibili 首先&#xff0c;本题不能考虑首先对数组排序&#xff0c;排序会导致数组直接变为一个…

2024-5-16

今日安排&#xff1a; 完结 nf_tables 模块的基本学习&#xff0c;然后开始审计源码mount 的使用&#xff0c;学习 namespace (昨昨昨昨天残留的任务)&#xff08;&#xff1a;看我能搁到什么时候静不下心学习新知识就做 CTF 题目&#x1f991;&#x1f991;&#x1f991; 今…

2010-2024年各地级市社会信用体系建设匹配DID数据

2010-2024年各地级市社会信用体系建设匹配DID数据 1、时间&#xff1a;2010-2024年 2、指标&#xff1a;行政区划代码、年份、所属省份、地区、社会信用体系建设示范区 3、范围&#xff1a;310个地级市 4、来源&#xff1a;国家发改委 5、指标解释&#xff1a; 社会信用体…

YOLO系列笔记(十五)—— Python 文件与目录操作指南:掌握 os 模块的常用命令

掌握 os 模块的常用命令 前言文件操作1. 检查文件是否存在&#xff1a;os.path.exists2. 删除文件&#xff1a;os.remove3. 重命名文件&#xff1a;os.rename4. 获取文件大小&#xff1a;os.path.getsize5. 读取文件内容&#xff1a;with open&r6. 写入文件内容&#xff1a…

【重学C语言】十四、结构体

【重学C语言】十四、结构体 结构体初始化和使用声明注意点结构体嵌套结构体数组字节对齐对齐数(Alignment)对齐要求对齐规则结构体成员的对齐示例编译器指令和属性为什么要对齐跨平台兼容性位段(位域)结构体 在C语言中,结构体(struct&#x

跨平台应用开发进阶(五十四)cordova自定义插件

文章目录 一、前言二、cordova 自定义插件2.1 cordova 安装2.2 cordova 创建 android 工程2.3 使用 cordova 官方提供的插件2.4 创建自定义插件 三、拓展阅读 一、前言 在前期博文《ReactNative进阶&#xff08;一&#xff09;&#xff1a;ReactNative 学习资料汇总》中&#…

C++基础与函数解析 | 函数的声明与定义 | 函数调用 | 函数详解 | 函数重载 | 重载解析 | 递归函数 | 内联函数 | 函数指针

文章目录 一、函数基础1.基本函数定义2.函数的声明与定义3.函数调用 二、函数详解1.参数2.函数体3.返回类型 三、函数重载与重载解析1.函数重载2.重载解析 四、函数相关的其他内容1.递归函数2.内联函数3.constexpr函数&#xff08;C11起&#xff09;4.consteval 函数 (C20 起 )…

Redis - hiredis源码安装和接口使用介绍

一、hiredis源码安装说明 本文创作基于 hiredisv1.2.0版本 1.简介 hiredis是一个用于与Redis交互的C语言客户端库。它提供了一组简单易用的API&#xff0c;使开发人员可以轻松地连接到Redis服务器&#xff0c;并执行各种操作&#xff0c;如设置和获取键值对、执行命令、订阅和…

C语言 | Leetcode C语言题解之第92题反转链表II

题目&#xff1a; 题解&#xff1a; struct ListNode *reverseBetween(struct ListNode *head, int left, int right) {// 因为头节点有可能发生变化&#xff0c;使用虚拟头节点可以避免复杂的分类讨论struct ListNode *dummyNode malloc(sizeof(struct ListNode));dummyNode…

案例实践 | 招商局集团基于长安链的双循环航运贸易应用

案例名称-招商局双循环航运贸易联盟链 ■ 建设单位 招商局集团 ■ 用户群体 货主企业、物流企业、基础设施运营商等各参与主体 ■ 应用成效 已赋能产业链上下游超1.2万家中小微企业&#xff0c;累计提供普惠金融超830亿元 案例背景 作为全球贸易大国&#xff0c;我国约…

uniapp外部scss文件使用scss语法不生效.

项目场景&#xff1a; 页面的样式重复我想提取出来作为公共样式 新建scss文件&#xff0c;然后引入&#xff0c;结果样式不生效 问题描述&#xff1a; uniapp官网示例引入css的方法 /* 绝对路径 */ import url(/common/uni.css); import url(/common/uni.css); /* 相对路径 …

风电功率预测 | 基于CNN卷积神经网络的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测完整代码风电功率预测 基于卷积神经网络(Convolutional Neural Network, CNN)的风电功率预测可以通过以下步骤实现: 数据准备:收集与风电场发电功率相关的数据,包括风速、风向、温度、湿度等气象数据以及风电场的历史功率数据。 数据预处理:对…