Java NIO简介

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。 NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于 通道的IO操作。NIO将以更加高效的方式进行文 件的读写操作。

Java NIO 与IO的主要区别

IONIO
面向流(Stream Oriented)面向缓冲区(Buffer Oriented)
阻塞IO(Blocking IO)非阻塞IO(Non Blocking IO)
(无)选择器(Selectors)

流,建立通道,直接面对数据的流动,输入输出都需要分别建立连接。(单向的)

管道:建立一个通道即可,通过buffer转载数据,buffer可读可写

传统的IO(面向流的)

image-20200916085552924

NIO:可以把通道理解成铁路,本身不能完成运输,需要借助buffer转载数据。NIO是面向缓冲区的传输,通道只是连接

image-20200916090025888

通道建立的是文件、磁盘、网络和程序的连接。比如磁盘文件的复制,我们需要建立被复制文件和程序的连接,将文件内容装入缓冲区中。然后建立复制文件和程序的通道,将缓冲区的内容写入新文件中。

@Test
public void testNIO() throws Exception {FileChannel fileChannel = FileChannel.open(Paths.get("1.txt"), StandardOpenOption.READ, StandardOpenOption.WRITE);ByteBuffer buffer = ByteBuffer.allocate(1024);System.out.println("读文件的内容....");fileChannel.read(buffer);buffer.flip();System.out.println(new String(buffer.array(), 0, buffer.limit()));buffer.clear();System.out.println("写入内容到文件中文件... ");buffer.put("文件的新内容".getBytes());buffer.flip();fileChannel.write(buffer);buffer.clear();fileChannel.close();
}@Test
public void testIO() throws Exception {FileInputStream fis = new FileInputStream("1.txt");FileOutputStream fos = new FileOutputStream("1.txt");System.out.println("源文件内容:" + fis.read());fos.write("新的内容".getBytes());fos.close();fis.close();
}

缓冲区(Buffer)和通道(Channel)

通道和缓冲区

Java NIO系统的核心在于:通道(Channel)和缓冲区 (Buffer)。通道表示打开到 IO 设备(例如:文件、 套接字)的连接。若需要使用 NIO 系统,需要获取 用于连接 IO 设备的通道以及用于容纳数据的缓冲 区。然后操作缓冲区,对数据进行处理。

简而言之,Channel 负责传输, Buffer 负责存储

缓冲区(Buffer)

  • 缓冲区(Buffer):一个用于特定基本数据类 型的容器。由 java.nio 包定义的,所有缓冲区 都是 Buffer 抽象类的子类。

  • Java NIO 中的 Buffer 主要用于与 NIO 通道进行 交互,数据是从通道读入缓冲区,从缓冲区写 入通道中的。

一、缓冲区(Buffer):在 Java NIO 中负责数据的存取。缓冲区就是数组。用于存储不同数据类型的数据
根据数据类型不同(boolean 除外),提供了相应类型的缓冲区:
ByteBuffer
CharBuffer
ShortBuffer
IntBuffer
LongBuffer
FloatBuffer
DoubleBuffer
上述缓冲区的管理方式几乎一致,通过 allocate() 获取缓冲区二、缓冲区存取数据的两个核心方法:
put() : 存入数据到缓冲区中
get() : 获取缓冲区中的数据三、缓冲区中的四个核心属性:
capacity : 容量,表示缓冲区中最大存储数据的容量。一旦声明不能改变。
limit : 界限,表示缓冲区中可以操作数据的大小。(limit 后数据不能进行读写)
position : 位置,表示缓冲区中正在操作数据的位置。
mark : 标记,表示记录当前 position 的位置。可以通过 reset() 恢复到 mark 的位置
0 <= mark <= position <= limit <= capacity
四、直接缓冲区与非直接缓冲区:
非直接缓冲区:通过 allocate() 方法分配缓冲区,将缓冲区建立在 JVM 的内存中
直接缓冲区:通过 allocateDirect() 方法分配直接缓冲区,将缓冲区建立在物理内存中。可以提高效率

image-20200916165043612

image-20200916165058840

直接与非直接缓冲区

  • 字节缓冲区要么是直接的,要么是非直接的。如果为直接字节缓冲区,则 Java 虚拟机会尽最大努力直接在 此缓冲区上执行本机 I/O 操作。也就是说,在每次调用基础操作系统的一个本机 I/O 操作之前(或之后), 虚拟机都会尽量避免将缓冲区的内容复制到中间缓冲区中(或从中间缓冲区中复制内容)。

  • 直接字节缓冲区可以通过调用此类的 allocateDirect() 工厂方法来创建。此方法返回的缓冲区进行分配和取消 分配所需成本通常高于非直接缓冲区。直接缓冲区的内容可以驻留在常规的垃圾回收堆之外,因此,它们对 应用程序的内存需求量造成的影响可能并不明显。所以,建议将直接缓冲区主要分配给那些易受基础系统的 本机 I/O 操作影响的大型、持久的缓冲区。一般情况下,最好仅在直接缓冲区能在程序性能方面带来明显好 处时分配它们。

  • 直接字节缓冲区还可以通过 FileChannel 的 map() 方法 将文件区域直接映射到内存中来创建。该方法返回 MappedByteBuffer 。Java 平台的实现有助于通过 JNI 从本机代码创建直接字节缓冲区。如果以上这些缓冲区 中的某个缓冲区实例指的是不可访问的内存区域,则试图访问该区域不会更改该缓冲区的内容,并且将会在 访问期间或稍后的某个时间导致抛出不确定的异常。

  • 字节缓冲区是直接缓冲区还是非直接缓冲区可通过调用其 isDirect() 方法来确定。提供此方法是为了能够在 性能关键型代码中执行显式缓冲区管理。

image-20200917082258631

image-20200917082314895

通道(Channel)

通道(Channel):由 java.nio.channels 包定义 的。Channel 表示 IO 源与目标打开的连接。 Channel 类似于传统的“流”。只不过 Channel 本身不能直接访问数据,Channel 只能与 Buffer 进行交互。

image-20200917082445708

一、通道(Channel):用于源节点与目标节点的连接。在 Java NIO 中负责缓冲区中数据的传输。Channel 本身不存储数据,因此需要配合缓冲区进行传输。
二、通道的主要实现类java.nio.channels.Channel 接口:|--FileChannel|--SocketChannel|--ServerSocketChannel|--DatagramChannel
三、获取通道
1. Java 针对支持通道的类提供了 getChannel() 方法本地 IO:FileInputStream/FileOutputStreamRandomAccessFile网络IO:SocketServerSocketDatagramSocket
2. 在 JDK 1.7 中的 NIO.2 针对各个通道提供了静态方法 open()
3. 在 JDK 1.7 中的 NIO.2 的 Files 工具类的 newByteChannel()六、字符集:Charset编码:字符串 -> 字节数组解码:字节数组  -> 字符串
// 将Buffer 中数据写入Channel中
int byteWritten = inChannle.write(buf);// 从Channel读取数据到Buffer中
int bytesRead = inChannel.read(buf);

分散(Scatter)和聚集(Gather)

分散(Scatter)与聚集(Gather)分散读取(Scattering Reads):将通道中的数据分散到多个缓冲区中聚集写入(Gathering Writes):将多个缓冲区中的数据聚集到通道中

image-20200917083018379

image-20200917083031899

通道之间的数据传输

通道之间的数据传输transferFrom()transferTo()
//通道之间的数据传输(直接缓冲区)
@Test
public void test3() throws IOException {FileChannel inChannel = FileChannel.open(Paths.get("d:/1.mkv"), StandardOpenOption.READ);FileChannel outChannel = FileChannel.open(Paths.get("d:/2.mkv"), StandardOpenOption.WRITE, StandardOpenOption.READ, StandardOpenOption.CREATE);//		inChannel.transferTo(0, inChannel.size(), outChannel);outChannel.transferFrom(inChannel, 0, inChannel.size());inChannel.close();outChannel.close();
}

文件通道(FileChannel)

方法描述
int read(ByteBuffer dst)从 Channel 中读取数据到 ByteBuffer
long read(ByteBuffer[] dsts)将 Channel 中的数据“分散”到 ByteBuffer[]
int write(ByteBuffer src)将 ByteBuffer 中的数据写入到 Channel
long write(ByteBuffer[] srcs)将 ByteBuffer[] 中的数据“聚集”到 Channel
long position()返回此通道的文件位置
FileChannel position(long p)设置此通道的文件位置
long size()返回此通道的文件的当前大小
FileChannel truncate(long s)将此通道的文件截取为给定大小
void force(boolean metaData)强制将所有对此通道的文件更新写入到存储设备中

NIO 的非阻塞式网络通信

堵塞与非堵塞

  • 传统的 IO 流都是阻塞式的。也就是说,当一个线程调用 read() 或 write() 时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不 能执行其他任务。因此,在完成网络通信进行 IO 操作时,由于线程会 阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理, 当服务器端需要处理大量客户端时,性能急剧下降。

  • Java NIO 是非阻塞模式的。当线程从某通道进行读写数据时,若没有数 据可用时,该线程可以进行其他任务。线程通常将非阻塞 IO 的空闲时 间用于在其他通道上执行 IO 操作,所以单独的线程可以管理多个输入 和输出通道。因此,NIO 可以让服务器端使用一个或有限几个线程来同 时处理连接到服务器端的所有客户端。

分析NIO2 的优点

IO:服务端为每一个发送过来的用户请求创建一个线程来执行,解决单线程堵塞问题。但是服务器资源是有限的,不能无限开,而且线程资源利用率不高太浪费了。

image-20200916102633592

NIO2:客户端与服务器建立的channel,通过selector管理,当一个channel的数据准备完毕了,selector才会建立与server的连接,把准备好的数据发送过去,这就避免了多开线程浪费资源的问题。

image-20200917085418177

选择器(Selector)

  • 选择器(Selector) 是 SelectableChannle 对象的多路复用器,Selector 可 以同时监控多个 SelectableChannel 的 IO 状况,也就是说,利用 Selector 可使一个单独的线程管理多个 Channel。Selector 是非阻塞 IO 的核心
  • SelectableChannle 的结构如下图:

image-20200917083617339

选择器(Selector)的应用

  • 当调用 register(Selector sel, int ops) 将通道注册选择器时,选择器 对通道的监听事件,需要通过第二个参数 ops 指定。

  • 可以监听的事件类型(可使用 SelectionKey 的四个常量表示):

    • 读 : SelectionKey.OP_READ (1)
    • 写 : SelectionKey.OP_WRITE (4)
    • 连接 : SelectionKey.OP_CONNECT (8)
    • 接收 : SelectionKey.OP_ACCEPT (16)
  • 若注册时不止监听一个事件,则可以使用“位或”操作符连接。

    // 注册”监听事件“
    int interestSet = SelectionKey.OP_READ|SelectionKey.OP_WRITE;
    

Selector 常用方法

方法描述
Set keys()所有的 SelectionKey 集合。代表注册在该Selector上的Channel
selectedKeys()被选择的 SelectionKey 集合。返回此Selector的已选择键集
int select()监控所有注册的Channel,当它们中间有需要处理的 IO 操作时, 该方法返回,并将对应得的 SelectionKey 加入被选择的 SelectionKey 集合中,该方法返回这些 Channel 的数量。
int select(long timeout)可以设置超时时长的 select() 操作
int selectNow()执行一个立即返回的 select() 操作,该方法不会阻塞线程
Selector wakeup()使一个还未返回的 select() 方法立即返回
void close()关闭该选择器
// 创建 Selector :通过调用 Selector.open() 方法创建一个 Selector
Selector selector = Selector.open();// 向选择器注册通道:SelectableChannel.register(Selector sel,int ops)// 创建一个Socket套接字
Socket socket = new Socket(InetAddress.getByName("127.0.0.1").9988);// 获取SocketChannel
SocketChannel channel = socket.getChannel();// 创建选择器
Selector selector = Selector.open();// 将SocketChannel 切换成非堵塞模式
channel.configureBlocking(false);// 向Selector注册Channel
SelectionKey key = channel.register(selector,SelectionKey.OP_ACCEPT);

SocketChannel、ServerSocketChannel、DatagramChannel

SocketChannel

  • Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。

  • 操作步骤:

    • 打开 SocketChannel
    • 读写数据
    • 关闭 SocketChannel
  • Java NIO中的 ServerSocketChannel 是一个可以

    监听新进来的TCP连接的通道,就像标准IO中 的ServerSocket一样。

DatagramChannel

  • Java NIO中的DatagramChannel是一个能收发 UDP包的通道。
  • 操作步骤:
    • 打开 DatagramChannel
    • 接收/发送数据

管道(Pipe)

Java NIO 管道是2个线程之间的单向数据连接。 Pipe有一个source通道和一个sink通道。数据会 被写到sink通道,从source通道读取。

image-20200917084743936

Java NIO2(Path、Paths与Files)

image-20200917085714282

image-20200917085722657

image-20200917085731857

image-20200917085802369

image-20200917085810956

代码

public class Demo {public static void main(String[] args) {new Thread(() -> server(), "服务端").start();new Thread(() -> client(), "客户端").start();}public static void server() {ServerSocketChannel ssChannel = null;Selector selector = null;try {ssChannel = ServerSocketChannel.open();ssChannel.bind(new InetSocketAddress(7788));ssChannel.configureBlocking(false);// 选择器selector = Selector.open();ssChannel.register(selector, SelectionKey.OP_ACCEPT);while (selector.select() > 0) {Iterator<SelectionKey> it = selector.selectedKeys().iterator();while (it.hasNext()) {SelectionKey sk = it.next();if (sk.isAcceptable()) {// tcp 需要握手SocketChannel accept = ssChannel.accept(); //正式建立与客户端的连接accept.configureBlocking(false);accept.register(selector, SelectionKey.OP_READ); // 把这个连接注册到选择器中} else if (sk.isReadable()) {SocketChannel sc = (SocketChannel) sk.channel();ByteBuffer buffer = ByteBuffer.allocate(1024);int len = 0;while ((len = sc.read(buffer)) > 0) {buffer.flip();System.out.println("server--" + Thread.currentThread().getName() + ":\t" + new String(buffer.array(), 0, len));buffer.clear();}}it.remove();}}} catch (IOException e) {e.printStackTrace();} finally {if (selector != null) {try {selector.close();} catch (IOException e) {e.printStackTrace();}}if (ssChannel != null) {try {ssChannel.close();} catch (IOException e) {e.printStackTrace();}}}}public static void client() {// 建立连接SocketChannel sChannel = null;try {sChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 7788));// 切换成非堵塞的sChannel.configureBlocking(false);// 读取控制台内容输出过去ByteBuffer buffer = ByteBuffer.allocate(1024);Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String str = scanner.next();buffer.put((":\t" + str).getBytes());// 通过管道输出buffer.flip();sChannel.write(buffer);buffer.clear();}} catch (IOException e) {e.printStackTrace();} finally {if (sChannel != null) {try {sChannel.close();} catch (IOException e) {e.printStackTrace();}}}}}
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. python sql executemany 执行慢的问题

    环境 Python3.7.6 pymysql0.10.0 这条sql使用executemany&#xff0c;只有一行数据时仍然执行执行很慢。 query """INSERT into settlement.salary_data (start_dt, end_dt, belong_to, report_to, ... , create_time, update_time)VALUES(%(start_dt)s, %(en…...

    2024/5/7 14:14:37
  2. 数据库存储引擎

    存储引擎是存储数据&#xff0c;建立索引&#xff0c;更新查询数据等等技术的实现方式。存储引擎是针对表的&#xff0c;在创建表的时候可以指定所要使用的存储引擎。 这里主要介绍mysql中支持的其中三种存储引擎&#xff1a; InnoDB(mysql默认的存储引擎)&#xff1a;支持事…...

    2024/4/28 5:26:31
  3. LeetCode-674. 最长连续递增序列

    最长连续递增序列 给定一个未经排序的整数数组&#xff0c;找到最长且连续的的递增序列&#xff0c;并返回该序列的长度。 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3。 尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的&#xff0c;因为…...

    2024/5/7 18:06:58
  4. plsql 数据库密码过期修改(转)

    最近在登录plsql时&#xff0c;提示your password has experied, 要求让修改数据库密码。以下是解决方法: 1. 在登录plsql的时候&#xff0c;用 sys/system your password &#xff0c; 注意修改连接为:sysdba 2.找到users 3.找到你的用户名&#xff0c; 点击右键&#xff0…...

    2024/4/28 19:36:13
  5. Permission denied (publickey). 解决方法

    Permission denied (publickey). 解决方法参考文章&#xff1a; &#xff08;1&#xff09;Permission denied (publickey). 解决方法 &#xff08;2&#xff09;https://www.cnblogs.com/guodavid/p/11004499.html 备忘一下。...

    2024/5/7 13:34:08
  6. TCP发送数据

    /* TCP发送数据 */ public class SocketDome01 { public static void main(String[] args) throws IOException { //1.创建客户端的Socket对象 //Socket​(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号。 Socket s new Socket(“zshao”,10001); …...

    2024/5/1 1:04:14
  7. 图片转成base64

    图片转成base64 关于更多日常使用的公共类的操作方法&#xff0c;可以关注下小滑轮网站 http://www.feiaci.com/#/self/code /*** 蒋图片转成base64* width、height调用时传入具体像素值&#xff0c;控制大小 ,不传则默认图像大小* 可以会有跨域问题&#xff0c;建议是同源* …...

    2024/5/1 1:18:01
  8. Python对word文档重排版

    介绍 舍友从网上下载的word题库文档很乱&#xff0c;手动改了大半天才改了一点&#xff0c;想起python是大名鼎鼎的自动化脚本&#xff0c;于是乎开始了python对word的一顿瞎操作。 分析需求 对文档中的内容进行分析&#xff0c;只留下题目&#xff0c;选项&#xff0c;并且题…...

    2024/4/26 7:16:56
  9. Word/Excel快捷键F4(重复上次操作)失效的解决办法

    Word/Excel中快捷键F4&#xff08;重复上次操作&#xff09;失效的解决办法最近发现excel的F4快捷键突然失效&#xff0c;测试发现变成WINF4了。 最后找到原因&#xff0c;是因为最近升级的TIM版本&#xff08;QQ办公简洁版&#xff09;导致&#xff0c;新版本TIM和QQ占用了F4键…...

    2024/5/8 0:05:52
  10. 你以为的微小区别,可能差别是一个宇宙

    上周回老家&#xff0c;帮我小舅子看房&#xff0c;有一个特别有趣的现象&#xff0c;A楼盘与B楼盘&#xff0c;仅仅隔一条马路。真的只是隔一条马路而已。 房价相差7-8百元每平。老家18线城市&#xff0c;7-8百元就是12%的区别。 对于买房&#xff0c;虽然我不是专家&#xf…...

    2024/5/8 4:29:09
  11. github上传代码error: src refspec master does not match any error: failed to push some refs to ‘https://g

    github上传代码至某空仓repository&#xff0c;有时候遇到报错。Windows下建议不要用cmd&#xff0c;而使用git-bash。 完整的过程为&#xff1a; echo "# psaData" >> README.mdgit initgit add README.mdgit config --global user.email "youexample.c…...

    2024/4/21 5:04:06
  12. commmo-io 包下的fileUtils , 获取文件列表

    commmo-io 包下的fileUtils &#xff0c; 获取文件列表 Collection<File> files FileUtils.listFiles(new File(rootPath),new IOFileFilter() {Overridepublic boolean accept(File file) {return file.getPath().contains("service") && file.getP…...

    2024/5/7 14:58:39
  13. 2020年第十七届中国研究生数学建模竞赛B题 降低汽油精制过程中的辛烷值损失模型【分享交流】

    交流:...

    2024/5/7 16:31:17
  14. linux中,&和&&,|和||

    & 表示任务在后台执行&#xff0c;如要在后台运行redis-server,则有 redis-server & && 表示前一条命令执行成功时&#xff0c;才执行后一条命令 &#xff0c;如 echo 1‘ && echo ‘2’ | 表示管道&#xff0c;上一条命令的输出&#xff0c;作为下一…...

    2024/4/24 17:23:19
  15. IE下不支持Promise的问题

    1、vue版 ①安装依赖 npm install --save-dev es6-promise ②在main.js中导入依赖 import Promise from es6-promise Promise.polyfill() 2、普通版本 <script type"text/javascript">//测试var polyfill document.createElement("script"); …...

    2024/5/6 15:40:01
  16. 数组和链表的区别以及应用场景

    数组和链表的区别以及应用场景...

    2024/4/21 21:10:03
  17. STM32的FATFS文件系统移植的debug过程

    对于FATFS文件系统的移植&#xff0c;正点原子已经有比较完整的移植视频和相应源码。因此关于FATFS内部诸如diskio.c、ff.c和ffconf.h等文件的功能和修改这里就不再详述。博主在这里主要共享一下自己debug的一些过程(主要是针对FR_NO_FILESYSTEM)&#xff0c;希望能让网友们在移…...

    2024/4/28 8:11:42
  18. Java大数据平台开发 学习笔记(21)—— 二叉树的删除节点方式

    一、数据结构与算法&#xff1a; Step 1) 创建 二叉树节点&#xff1a; //表示一个雇员 class HeroNode{//定义属性private int no;private String name;private HeroNode left;private HeroNode right;//构造方法public HeroNode(int no, String name){this.no no;this.name…...

    2024/4/27 9:39:09
  19. java中 IO流的学习

    http://blog.csdn.net/zhaoyanjun6/article/details/54292148...

    2024/4/21 21:10:01
  20. 守护进程在ROS机器人上的应用

    前天&#xff0c;我发现机器人在运行过程中出现程序异常退出&#xff0c;每次都需要重启程序或机器人。 如何解决此问题呢&#xff1f;我的思路是1.找问题根源&#xff0c;根治。2.若不能根治&#xff0c;防范。根治防范确保程序的足够健壮。 接下来&#xff0c;找问题根源&…...

    2024/4/21 21:09:59

最新文章

  1. 顺序表的实现(迈入数据结构的大门)

    什么是数据结构 数据结构是由&#xff1a;“数据”与“结构”两部分组成 数据与结构 数据&#xff1a;如我们所看见的广告、图片、视频等&#xff0c;常见的数值&#xff0c;教务系统里的&#xff08;姓名、性别、学号、学历等等&#xff09;&#xff1b; 结构&#xff1a;当…...

    2024/5/8 6:41:19
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?

    前言 ASP.NET Core 内置的标识&#xff08;identity&#xff09;框架&#xff0c;采用的是 RBAC&#xff08;role-based access control&#xff0c;基于角色的访问控制&#xff09;策略&#xff0c;是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…...

    2024/5/5 15:45:29
  4. 流域生态系统水-碳-氮耦合过程模拟

    流域是一个相对独立的自然地理单元&#xff0c;它是以水系为纽带&#xff0c;将系统内各自然地理要素连结成一个不可分割的整体。碳和氮是陆地生态系统中最重要的两种化学元素&#xff0c;而在流域系统内&#xff0c;水-碳-氮是相互联动、不可分割的耦合体。随着流域内人类活动…...

    2024/5/7 22:24:20
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/7 19:05:20
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/7 22:31:36
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/8 1:37:40
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/7 14:19:30
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/8 1:37:39
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/7 16:57:02
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/7 14:58:59
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/7 1:54:46
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/7 21:15:55
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/8 1:37:35
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/7 16:05:05
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/7 16:04:58
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/8 1:37:32
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/7 16:05:05
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/8 1:37:31
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/8 1:37:31
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/7 11:08:22
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/7 7:26:29
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/8 1:37:29
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/7 17:09:45
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57