IO类day02

JAVA IO

  • java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作.

  • java将IO按照方向划分为输入与输出,参照点是我们写的程序.

  • 输入:用来读取数据的,是从外界到程序的方向,用于获取数据.

  • 输出:用来写出数据的,是从程序到外界的方向,用于发送数据.

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

Java定义了两个超类(抽象类):
  • java.io.InputStream:所有字节输入流的超类,其中定义了读取数据的方法.因此将来不管读取的是什么设备(连接该设备的流)都有这些读取的方法,因此我们可以用相同的方法读取不同设备中的数据

  • java.io.OutputStream:所有字节输出流的超类,其中定义了写出数据的方法.

java将流分为两类:节点流与处理流:
  • 节点流:也称为低级流.节点流的另一端是明确的,是实际读写数据的流,读写一定是建立在节点流基础上进行的.

  • 处理流:也称为高级流.处理流不能独立存在,必须连接在其他流上,目的是当数据流经当前流时对数据进行加工处理来简化我们对数据的该操作.

实际应用中,我们可以通过串联一组高级流到某个低级流上以流水线式的加工处理对某设备的数据进行读写,这个过程也成为流的连接,这也是IO的精髓所在.
文件流

文件流是一对低级流,用于读写文件数据的流.用于连接程序与文件(硬盘)的"管道".负责读写文件数据.

文件输出流:java.io.FileOutputStream
package io;
​
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
​
/*** JAVA IO* IO:Input,Output 即:输入与输出** JAVA IO用于我们程序可以和外界交换数据。用于与外界的数据进行读写操作的。** java中将输入与输出比喻为"流":stream* 如何理解流:讲流想象为一个连接我们程序和另一端的"管道",在其中按照同一方向顺序移动的数据。*          有点像"水管"中向着统一方向流动的水。* 输入流:从外界向我们的程序中移动的方向,因此是用来获取数据的流,作用就是:读取操作* 输出流:写出操作* 注意:流是单向的,输入永远用来读,输出永远用来写。将来我们在实际开发中希望与程序交互的另一端* 互相发送数据时,我们只需要创建一个可以连接另一端的"流",进行读写操作完成。** java定义了两个超类,来规范所有的字节流* java.io.InputStream:所有字节输入流的超类(抽象类),里面定义了读取字节的相关方法。*                     所有字节输入流都继承自它* java.io.OutputStream:所有字节输出流的超类(抽象类),里面定义了写出字节的相关方法。*                      所有的字节输出流都继承自它*** 文件流* java.io.FileInputStream和java.io.FileOutputStream* 作用是真实连接我们程序和文件之间的"管道"。其中文件输入流用于从文件中读取字节。而文件输出流则* 用于向文件中写入字节。** 文件流是节点流* JAVA IO将流划分为两类:节点流和处理流* 节点流:俗称"低级流",特点:真实连接我们程序和另一端的"管道",负责实际读写数据的流*       文件流就是典型的节点流,真实连接我们程序与文件的"管道",可以读写文件数据了。* 处理流:俗称"高级流"*       特点:*       1:不能独立存在(单独实例化进行读写操作不可以)*       2:必须连接在其他流上,目的是当数据"流经"当前流时,可以对其做某种加工操作,简化我们的工作、* 流的连接:实际开发中经常会串联一组高级流最终到某个低级流上,对数据进行流水线式的加工读写。**/
public class FOSDemo {public static void main(String[] args) throws IOException {//需求:向当前目录的文件fos.dat中写入数据/*在创建文件输出流时,文件输出流常见的构造器:FileOutputStream(String filename)FileOutputStream(File file)上述两种构造器都会在创建时将该文件创建出来(如果该文件不存在才会这样做),自动创建该文件的前提是该文件所在的目录必须存在,否则会抛出异常。*///        File file = new File("./fos.dat");//        FileOutputStream fos = new FileOutputStream(file);/*一个小技巧:在指定相对路径时,如果是从"当前目录"(./)开始的,那么"./"是可以忽略不写的因为在相对路径中,默认就是从"./"开始*/
//        FileOutputStream fos = new FileOutputStream("./fos.dat");FileOutputStream fos = new FileOutputStream("fos.dat");//与上面一句位置相同
​/*OutputStream(所有字节输出流的超类)中定义了写出字节的方法:write(int d)write(byte[] data)write(byte[] data,int offset,int len)
​其中:void write(int d)写出一个字节,将给定的参数int值对应的2进制的"低八位"写出。
​文件输出流继承OutputStream后就重写了该方法,作用是将该字节写入到文件中。*/
​/*向文件中写入1个字节fow.write(1)将int值的1对应的2进制的"低八位"写如到文件第一个字节位置上
​1个int值占4个字节,每个字节是一个8为2进制int 1的2进制样子:00000000 00000000 00000000 00000001^^^^^^^^写出的字节
​write方法调用后,fos.dat文件中就有了1个字节,内容为:00000001
​再次调用:fos.write(2)int 2的2进制样子:00000000 00000000 00000000 00000010^^^^^^^^写出的字节write方法调用后,fos.dat文件中就有了2个字节,内容为:00000001 00000010上次写的   本次写的*/
​fos.write(1);fos.write(2);
​System.out.println("写出完毕!");//注意!流使用完毕后要关闭,来释放底层资源fos.close();
​
​}
}
​
文件输入流
package io;
​
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
​
/*** 使用文件输入流读取文件中的数据*/
public class FISDemo {public static void main(String[] args) throws IOException {//将fos.dat文件中的字节读取回来/*fos.dat文件中的数据:00000001 00000010*/FileInputStream fis = new FileInputStream("fos.dat");/*java.io.InputStream(所有字节输入流的超类)定义着读取字节的相关方法int read()读取1个字节并以int型整数返回读取到的字节内容,返回的int值中对应的2进制的"低八位"就是读取到的数据。如果返回的int值为整数-1(这是一个特殊值,32位2进制全都是1)表达的是流读取到了末尾了。
​int read(byte[] data)
​文件输入流重写了上述两个方法用来从文件中读取对应的字节。*/
​/*fos.dat文件中的数据:00000001 00000010^^^^^^^^第一次读取的字节
​当我们第一次调用:int d = fis.read();//读取的是文件中第一个字节
​该int值d对应的2进制:00000000 00000000 00000000 00000001|------自动补充24个0-------| ^^^^^^^^读取到的数据而该2进制对应的整数就是1.*/int d = fis.read();//读取到的就是整数1System.out.println(d);/*fos.dat文件中的数据:00000001 00000010^^^^^^^^第二次读取的字节
​当我们第二次调用:d = fis.read();//读取的是文件中第二个字节
​该int值d对应的2进制:00000000 00000000 00000000 00000010|------自动补充24个0-------| ^^^^^^^^读取到的数据而该2进制对应的整数就是2.*/d = fis.read();//2System.out.println(d);
​/*fos.dat文件中的数据:00000001 00000010 文件末尾^^^^^^^^没有第三个字节
​当我们第三次调用:d = fis.read();//读取到文件末尾了!
​该int值d对应的2进制:11111111 11111111 11111111 11111111该数字是正常读取1个字节永远表达不了的值。并且-1的2进制格式好记。因此用它表达读取到了末尾。
​*/d = fis.read();//-1System.out.println(d);
​fis.close();}
}
​

文件复制

package io;
​
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
​
/*** 利用文件输入流与输出流实现文件的复制操作*/
public class CopyDemo {public static void main(String[] args) throws IOException {//用文件输入流读取待复制的文件
//        FileInputStream fis = new FileInputStream("image.jpg");FileInputStream fis = new FileInputStream("01.rmvb");//用文件输出流向复制文件中写入复制的数据
//        FileOutputStream fos = new FileOutputStream("image_cp.jpg");FileOutputStream fos = new FileOutputStream("01_cp.rmvb");/*原文件image.jpg中的数据10100011 00111100 00001111 11110000....^^^^^^^^读取该字节
​第一次调用:int d = fis.read();d的2进制:00000000 00000000 00000000 10100011读到的字节
​
​fos向复制的文件image_cp.jpg中写入字节
​第一次调用:fos.write(d);作用:将给定的int值d的2进制的"低八位"写入到文件中d的2进制:00000000 00000000 00000000 10100011写出字节调用后image_cp.jpg文件数据:10100011*//*循环条件是只要文件没有读到末尾就应该复制如何直到读取到末尾了呢?前提是:要先尝试读取一个字节,如果返回值是-1就说明读到末尾了如果返回值不是-1,则说明读取到的是一个字节的内容,就要将他写入到复制文件中*/int d;//先定义一个变量,用于记录每次读取到的数据long start = System.currentTimeMillis();//获取当前系统时间while ((d = fis.read()) != -1) {fos.write(d);}long end = System.currentTimeMillis();System.out.println("复制完毕!耗时:" + (end - start) + "ms");fis.close();fos.close();}
}
​

块读写的文件复制操作

int read(byte[] data) 一次性从文件中读取给定的字节数组总长度的字节量,并存入到该数组中。 返回值为实际读取到的字节量。若返回值为-1则表示读取到了文件末尾。

块写操作 void write(byte[] data) 一次性将给定的字节数组所有字节写入到文件中

void write(byte[] data,int offset,int len) 一次性将给定的字节数组从下标offset处开始的连续len个字节写入文件

package io;
​
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
​
/*** 通过提高每次读写的数据,减少读写次数可以提高读写效率。*/
public class CopyDemo2 {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("01.rmvb");FileOutputStream fos = new FileOutputStream("01_cp.rmvb");/*块读:一次性读取一组字节块写:一次性将写出一组字节
​java.io.InputStream上定义了块读字节的方法:int read(byte[] data)一次性读取给定字节数组length个字节并从头开始装入到数组中。返回值为实际读取到的字节量如果返回值为-1则表示流读取到了末尾。文件流重写了该方法,作用是块读文件里的数据。
​java.io.OutputStream上定义了块写字节的方法:void write(byte[] data)一次性将给定的字节数组中所有的字节写出。
​void write(byte[] data,int offset,int len)一次性将给定的字节数组data中从下标offset处开始的连续len个字节写出。
​
​原文件数据(假设文件共6个字节):11110000 00001111 01010101 11111111 00000000 10101010
​byte[] buf = new byte[4];//创建一个长度为4的字节数组buf默认的样子(每个元素若以2进制表现):{00000000,00000000,00000000,00000000}int len;//记录每次实际读取的字节数
​当第一次调用:len = fis.read(buf);由于字节数组buf的长度为4.因此可以一次性最多从文件中读取4个字节并装入到buf数组中返回值len表示的整数是这次实际读取到了几个字节。
​原文件数据(假设文件共6个字节):11110000 00001111 01010101 11111111 00000000 10101010^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^第一次读取的4个字节
​buf:{11110000,00001111,01010101,11111111}len:4 表示本次读取到了4个字节
​
​第二次调用:len = fis.read(buf);
​原文件数据(假设文件共6个字节):11110000 00001111 01010101 11111111 00000000 10101010 文件末尾了^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^本次实际只能读取到2个字节buf:{00000000,10101010,01010101,11111111}|本次新读的2字节数据| |---上次的旧数据---|len:2表示本次实际只读取到了2个字节。它的意义就是告诉你buf数组中前几个字节是本次真实读取到的数据
​
​第三次调用:len = fis.read(buf);原文件数据(假设文件共6个字节):11110000 00001111 01010101 11111111 00000000 10101010 文件末尾了^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^buf:{00000000,10101010,01010101,11111111} 没有任何变化!len:-1 表示本次读取时已经是文件末尾了!!*//*00000000 8位2进制 1byte  1字节1024byte = 1kb1024kb = 1mb1024mb = 1gb1024gb = 1tb*//*编译完该句代码:byte[] buf = new byte[10240];
​在实际开发中,有时候用一个计算表达式更能表现这个值的含义时,我们不妨使用计算表达式long t = 864000000;long t = 60 * 60 * 24 * 1000;
​*/byte[] buf = new byte[1024 * 10];//10kbint len;//记录每次实际读取到的字节数long start = System.currentTimeMillis();while ((len = fis.read(buf)) != -1) {fos.write(buf, 0, len);}long end = System.currentTimeMillis();System.out.println("复制完毕,耗时:" + (end - start) + "ms");fis.close();fos.close();}
}
​

写文本数据

String提供方法: byte[] getBytes(String charsetName) 将当前字符串转换为一组字节

参数为字符集的名字,常用的是UTF-8。 其中中文字3字节表示1个,英文1字节表示1个。

package io;
​
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
​
/*** 使用文件输出流向文件中写入文本数据*/
public class WriteStringDemo {public static void main(String[] args) throws IOException {/*1:创建一个文件输出流2:将写出的文字先转换为2进制(一组字节)3:关闭流
​文件流有两种创建方式:1:覆盖模式,对应的构造器:FileOutputStream(String filename)FileOutputStream(File file)所谓覆盖模式:文件流在创建是若发现该文件已存在,则会将该文件原内容全部删除。然后在陆续将通过该流写出的内容保存到文件中。        */FileOutputStream fos = new FileOutputStream("fos.txt",true);String line = "让我再看你一遍,从南到北。";/*String提供了将内容转换为一组字节的方法:getBytes()java.nio.charset.StandardCharsets*/byte[] data = line.getBytes(StandardCharsets.UTF_8);fos.write(data);
​line = "像是北五环路蒙住的双眼。";data = line.getBytes(StandardCharsets.UTF_8);fos.write(data);       
​System.out.println("写出完毕!");fos.close();}
}
​

文件输出流-追加模式

重载的构造方法可以将文件输出流创建为追加模式

  • FileOutputStream(String path,boolean append)

  • FileOutputStream(File file,boolean append)

当第二个参数传入true时,文件流为追加模式,即:指定的文件若存在,则原有数据保留,新写入的数据会被顺序的追加到文件中

package io;
​
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
​
/*** 使用文件输出流向文件中写入文本数据*/
public class WriteStringDemo {public static void main(String[] args) throws IOException {/*1:创建一个文件输出流2:将写出的文字先转换为2进制(一组字节)3:关闭流
​文件流有两种创建方式:1:覆盖模式,对应的构造器:FileOutputStream(String filename)FileOutputStream(File file)所谓覆盖模式:文件流在创建是若发现该文件已存在,则会将该文件原内容全部删除。然后在陆续将通过该流写出的内容保存到文件中。
​2:追加模式,对应的构造器FileOutputStream(String filename,boolean append)FileOutputStream(File file,boolean append)当第二个参数为true时,那么就是追加模式。所谓追加模式:文件流在创建时若发现该文件已存在,则原内容都保留。通过当前流陆续写出的内容都会被陆续追加到文件末尾。*/FileOutputStream fos = new FileOutputStream("fos.txt",true);
​String line = "斯国一!";byte[] data = line.getBytes(StandardCharsets.UTF_8);fos.write(data);
​line = "奥里给!";data = line.getBytes(StandardCharsets.UTF_8);fos.write(data);
​
​System.out.println("写出完毕!");fos.close();}
}
​

读取文本数据

package io;
​
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
​
/*** 从文件中读取文本数据*/
public class ReadStringDemo {public static void main(String[] args) throws IOException {/*1:创建一个文件输入流2:从文件中将字节都读取回来3:将读取到的字节转换回字符串*/FileInputStream fis = new FileInputStream("fos.txt");
​byte[] data = new byte[1024];//1kbint len = fis.read(data);//块读操作,返回值表达实际读取到了多少字节System.out.println("实际读取了:"+len+"个字节");/*String提供了构造方法可以将一个字节数组还原为字符串String(byte[] data,Charset charset)将给定的字节数组data中所有字节按照给定的字符集转换为字符串。
​String(byte[] data,int offset,int len,Charset charset)将给定的字节数组data从下标offset处开始的连续len个字节按照指定的字符集转换为字符串*/String line = new String(data,0,len,StandardCharsets.UTF_8);System.out.println(line.length());//输出字符串长度System.out.println(line);
​fis.close();}
}
​

####

总结

JAVA IO必会概念:

  • java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作.

  • java将IO按照方向划分为输入与输出,参照点是我们写的程序.

  • 输入:用来读取数据的,是从外界到程序的方向,用于获取数据.

  • 输出:用来写出数据的,是从程序到外界的方向,用于发送数据.

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

因此流的读写是顺序读写的,只能顺序向后写或向后读,不能回退。

Java定义了两个超类(抽象类):
  • java.io.InputStream:所有字节输入流的超类,其中定义了读取数据的方法.因此将来不管读取的是什么设备(连接该设备的流)都有这些读取的方法,因此我们可以用相同的方法读取不同设备中的数据

    常用方法:
    ​
    int read():读取一个字节,返回的int值低8位为读取的数据。如果返回值为整数-1则表示读取到了流的末尾
    ​
    int read(byte[] data):块读取,最多读取data数组总长度的数据并从数组第一个位置开始存入到数组中,返回值表示实际读取到的字节量,如果返回值为-1表示本次没有读取到任何数据,是流的末尾。

  • java.io.OutputStream:所有字节输出流的超类,其中定义了写出数据的方法.

    常用方法:

    void write(int d):写出一个字节,写出的是给定的int值对应2进制的低八位。

    void write(byte[] data):块写,将给定字节数组中所有字节一次性写出。

    void write(byte[]data,int off,int len):块写,将给定字节数组从下标off处开始的连续len个字节一次性写出。

java将流分为两类:节点流与处理流:
  • 节点流:也称为低级流.

    节点流的另一端是明确的,是实际读写数据的流,读写一定是建立在节点流基础上进行的.

  • 处理流:也称为高级流.

    处理流不能独立存在,必须连接在其他流上,目的是当数据流经当前流时对数据进行加工处理来简化我们对数据的该操作.

实际应用中,我们可以通过串联一组高级流到某个低级流上以流水线式的加工处理对某设备的数据进行读写,这个过程也成为流的连接,这也是IO的精髓所在.

文件流

文件流是一对低级流,用于读写文件的流

java.io.FileOutputStream文件输出流,继承自java.io.OutputStream
常用构造器
覆盖模式对应的构造器
覆盖模式是指若指定的文件存在,文件流在创建时会先将该文件原内容清除。
  • FileOutputStream(String pathname):创建文件输出流用于向指定路径表示的文件做写操作

  • FileOutputStream(File file):创建文件输出流用于向File表示的文件做写操作。

    注:如果写出的文件不存在文件流自动创建这个文件,但是如果该文件所在的目录不存在会抛出异常:java.io.FileNotFoundException

追加写模式对应的构造器
追加模式是指若指定的文件存在,文件流会将写出的数据陆续追加到文件中。
  • FileOutputStream(String pathname,boolean append):如果第二个参数为true则为追加模式,false则为覆盖模式

  • FileOutputStream(File file,boolean append):同上

常用方法:
void write(int d):向文件中写入一个字节,写入的是int值2进制的低八位。
​
void write(byte[] data):向文件中块写数据。将数组data中所有字节一次性写入文件。
​
void write(byte[] data,int off,int len):向文件中快写数据。将数组data中从下标off开始的连续len个字节一次性写入文件。
java.io.FileInputStream文件输入流,继承自java.io.InputStream
常用构造器

FileInputStream(String pathname) 创建读取指定路径下对应的文件的文件输入流,如果指定的文件不存在则会抛出异常java.io.FileNotFoundException

FileInputStream(File file) 创建读取File表示的文件的文件输入流,如果File表示的文件不存在则会抛出异常java.io.IOException。

常用方法
int read():从文件中读取一个字节,返回的int值低八位有效,如果返回的int值为整数-1则表示读取到了文件末尾。
​
int read(byte[] data):块读数据,从文件中一次性读取给定的data数组总长度的字节量并从数组第一个元素位置开始存入数组中。返回值为实际读取到的字节数。如果返回值为整数-1则表示读取到了文件末尾。

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

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

相关文章

LINUX基础培训三之文件和目录管理

前言、本章学习目标 了解LINUX文件类型及目录结构掌握LINUX文件的基本属性熟悉用户、用户组、其他的安全模型掌握LINUX文件和目录的常用管理 一、LINUX文件管理 1、什么是LINUX中的文件 在LINUX操作系统中有一个重要的概念:一切皆为文件。除了我们常说的文本文…

pytorch09:可视化工具-TensorBoard,实现卷积核和特征图可视化

目录 一、TensorBoard简介二、TensorBoard安装三、TensorBoard运行可视化四、TensorBoard详细使用4.1 SummaryWriter4.2 add_scalar()4.3 add_scalars()4.4 add_histogram()4.4.1实际项目开发使用 4.5 add_image()4.6 torchvision.utils.make_grid4.7 卷积核和特征图可视化4.7.…

Nature:物理所利用原位透射电子显微技术在分子尺度研究立方冰

冰是水在自然界中的固体形态,在大自然中也广泛存在,冰的结构及形成机理研究对云物理及低温储存物理至关重要,因此科学家们对冰的研究也历史久远。提到冰在较小尺度的存在形态,我们最容易想到的是雪花。如下图所示,雪花…

视频智能分析/边缘计算AI智能分析网关V4区域入侵检测算法如何配置?

边缘计算AI智能分析网关(V4版)部署了近40种AI算法模型,支持对接入的视频图像进行人、车、物、行为等实时检测分析,并上报识别结果,并能进行语音告警播放。算法配置后,即可对监控视频流进行实时检测&#xf…

(2017|NIPS,VQ-VAE,离散潜在)神经离散表示学习

Neural Discrete Representation Learning 公和众和号:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料) 目录 0. 摘要 3. VQ-VAE 3.1 离散潜在变量 3.2 学习 3.3 先验 4. 实验 0. 摘要 学习在无…

【QML COOK】- 000-创建Project

1. 文件->New Project... 2. Application(Qt)->Qt Quick Application(compat) 3. 填好【名称】和【创建路径】 4. 选择CMake 5. 选择QT6.2 6. 直接【下一步】 7. 直接下一步 8. 直接下一步 9. 出现工程文件 10. 点击运行 11. 出现窗口

10亿数据高效插入MySQL最佳方案

写在文章开头 你好,我叫sharkchili,目前还是在一线奋斗的Java开发,经历过很多有意思的项目,也写过很多有意思的文章,是CSDN Java领域的博客专家,也是Java Guide的维护者之一,非常欢迎你关注我的…

【性能】【算法】for循环,性能提高

目录 ■提高性能的方法 ・原理 1.1.java处理中,计算阶乘,为什么展开循环可以提高效率 1.2.从cpu的流水线角度,再说明一下 1.3.介绍一下 cup的指令流水线 ■实际运用 1.求和 代码 结果 2.求阶乘 (性能提高效果明显&…

Debezium发布历史56

原文地址: https://debezium.io/blog/2019/05/23/tutorial-using-debezium-connectors-with-apache-pulsar/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. 将 Debezium 连接器与 Apache Pulsar 结合…

笔试案例2

文章目录 1、笔试案例22、思维导图 1、笔试案例2 09)查询学过「张三」老师授课的同学的信息 selects.*,c.cname,t.tname,sc.score from t_mysql_teacher t, t_mysql_course c, t_mysql_student s, t_mysql_score sc where t.tidc.cid and c.cidsc.cid and sc.sids…

简洁大气带进度条的URL跳转页面HTML源码

源码介绍 简洁大气带进度条的URL跳转页面HTML源码,记事本修改里面的内容即可,喜欢的同学可以拿去使用 获取方式: 蓝奏云:https://wfr.lanzout.com/ic1iZ1kj6yde CSDN免积分下载:https://download.csdn.net/download/huayula/88…

Java桶排序、基数排序、剪枝算法

桶排序算法 桶排序的基本思想是: 把数组 arr 划分为 n 个大小相同子区间(桶),每个子区间各自排序,最后合并 。计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况。 1.找出待…

答疑解惑:核技术利用辐射安全与防护考核

前言 最近通过了《核技术利用辐射安全与防护考核》,顺利拿到了合格证。这是从事与辐射相关行业所需要的一个基本证书,考试并不难,在此写篇博客记录一下主要的知识点。 需要这个证书的行业常见的有医疗方面的,如放疗,…

黑马苍穹外卖学习Day3

目录 公共字段自动填充问题分析实现思路代码实现 新增菜品需求分析和设计接口设计代码开发开发文件上传接口功能开发 菜品分页查询需求分析和设计代码开发 菜品删除功能需求分析与设计代码实现代码优化 修改菜品需求分析和设计代码实现 公共字段自动填充 问题分析 员工表和分…

静态网页设计——崩坏3(HTML+CSS+JavaScript)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: 使用技术:HTMLCSSJS(静态网页设计) 主要内容:对游戏崩坏3进行简单介绍。 https://www.bilib…

【Linux进程】查看进程fork创建进程

目录 前言 1. 查看进程 2. 通过系统调用创建进程-fork初识 总结 前言 你有没有想过在使用Linux操作系统时,后台运行的程序是如何管理的?在Linux中,进程是一个非常重要的概念。本文将介绍如何查看当前运行的进程,并且讨论如何使用…

将项目同时提交到GitHub和码云Gitee上面,GitHub与Gitee同步

多个远程仓库同时使用 新建GitHub仓库 创建成功 在终端中创建仓库 如果你想在本地机器上创建Git仓库,或者想添加一个文件夹或文件到已经存在的Git仓库中,你应该在终端中创建你的Git仓库。在你可以通过终端来创建一个Git仓库。以下是在终端中创建Git仓…

java解析json复杂数据的第三种思路

文章目录 一、概述二、数据预览1. 接口json数据2. json转xml数据 三、代码实现1. pom.xml2. 核心代码3. 运行结果 四、源码传送 一、概述 接上篇 java解析json复杂数据的两种思路 我们已经通过解析返回json字符串得到数据,现在改变思路, 按照如下流程获取数据: #mermaid-svg-k…

AcrelCloud-3000环保用电监管云平台解决方案——安科瑞赵嘉敏

概述 国家全面推进打赢蓝天保卫战,打好碧水保卫战,打胜净土保卫战,加快生态环境保护、建设美丽中国。环保用电监管系统针对企业内的环保设施、设备运行状况进行检测,发挥环保设备的作用,提高监察效率,并为…

洛谷 P1217 [USACO1.5] 回文质数 Prime Palindromes 刷题笔记

P1217 [USACO1.5] 回文质数 Prime Palindromes - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 直接枚举 减枝优化判断 优化1 只有偶数才会是质数 优化2 回文数的判断次数要优于检查素数 先判断是否为回文数再检查是否为质数 if( hw(i)&&isprime(i)) 这里…