IO 流分类
一、File
File 类(磁盘操作)可以用于表示文件和目录的信息,但是它不表示文件的内容。递归地列出一个目录下所有文件:
public static void listAllFiles(File dir) {if (dir == null || !dir.exists()) {return;}if (dir.isFile()) {System.out.println(dir.getName());return;}for (File file : dir.listFiles()) {listAllFiles(file);}
}
二、IO 概述
什么是 IO: 磁盘与内存之间的数据交互,可以看做是一种数据的流动,按照流动方向,以内存为基准,分为输入 input 和输出 output,即流向内存的是输入流,流出内存的是输出流。Java IO操作主要是指使用 java.io包下的内容,进行输入、输出操作。输入也叫读取数据,输出也叫写出数据。
IO 的分类: 根据数据的流向分为:输入流和输出流。根据数据的类型分为:字节流(以字节为单位)和字符流(以字符为单位)。
输入流 | 输出流 | |
---|---|---|
字节流 | InputStream | OutputStream |
字符流 | Reader | Writer |
三、字节流
一切文件数据(文本、图片、视频)在存储时,都是以二进制数字的形式保存,传输时也是如此。所以,字节流可以传输任意文件数据,在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输始终为二进制数据。
字节输入流InputStream
:java.io.InputStream
抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存。它定义了字节输入流的基本共性。
public abstract int read() | 从输入流读取数据的下一个字节 |
public int read(byte b[] b) | 从输入流中读取一些字节数,并将它们存储到字节数组b中 |
public int read(byte b[] b, int off, int len) | off 写入数据的位置,数组中的起始偏移量。从输入流读取多达len字节的数据到字节数 |
public void close() | 关闭此输入流并释放与此流相关联的任何资源 |
// 读取数据
public abstract int read()// 将读取到的数据放在 byte 数组中,该方法实际上是根据下面的方法实现的,off 为 0,len 为数组的长度
public int read(byte b[])// 从第 off 位置读取 len 长度字节的数据放到 byte 数组中,流是以 -1 来判断是否读取结束的
public int read(byte b[], int off, int len)// 跳过指定个数的字节不读取,想想看电影跳过片头片尾
public long skip(long n)// 返回可读的字节数量
public int available()// 读取完,关闭流,释放资源
public void close()// 标记读取位置,下次还可以从这里开始读取,使用前要看当前流是否支持,可以使用 markSupport() 方法判断
public synchronized void mark(int readlimit)// 重置读取位置为上次 mark 标记的位置
public synchronized void reset()// 判断当前流是否支持标记流,和上面两个方法配套使用
public boolean markSupported()
字节输出流OutputStream
:java.io.OutputStream
抽象类是表示字节输出流的所有类的超类,它定义了字节流的基本共性功能方法。
public abstract void write(int b) | 将指定的字节写入此输出流 |
public void write(byte b[]) | 将 b.length字节从指定的字节数组写入此输出流 |
public void write(byte b[], int off, int len) | 从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流 |
public void flush() | 刷新此输出流并强制任何缓冲的输出字节被写出 |
public void close() | 关闭此输出流并释放此流相关联的任务系统资源 |
//写入一个字节,可以看到这里的参数是一个 int 类型,对应上面的读方法,int 类型的 32 位,只有低 8 位才写入,高 24 位将舍弃。
public abstract void write(int b)// 将数组中的所有字节写入,和上面对应的 read() 方法类似,实际调用的也是下面的方法。
public void write(byte b[])// 将 byte 数组从 off 位置开始,len 长度的字节写入
public void write(byte b[], int off, int len)// 强制刷新,将缓冲中的数据写入
public void flush()// 关闭输出流,流被关闭后就不能再输出数据了
public void close()
四、文件流
FileInputStream
把硬盘中的数据读取到内存中
/*** java.io.InputStream: 字节输入流。 此抽象类是表示字节输入流的所有类的超类。* java.io.FileInputStream extends InputStream: 文件输入流* 作用:把硬盘文件中的数据,读取到内存中** 构造方法:public FileInputStream(String name) 文件路径* public FileInputStream(File file) 文件* 构造方法的作用:* 1、创建一个 FileInputStream 对象;* 2、会把 FileInputStream对象指向构造方法中创建的文件* java程序--JVM--OS读取方法--读取文件* 1个中文 GBK占两个字节 UTF-8占3个字节*/
public class MyInputStream {public static void main(String[] args) {FileInputStream fis = null;/*** JDK7 新特性【了解】 在 try 后边可以增加一个() ,在括号中定义流对象,那么这个流对象的作用域就在 try中有效,* try 中的代码执行完毕,会自动把流对象释放,不用写 finally。多个流用 ;号隔开* 例如: try(FileInputStream fis = new FileInputStream("test.txt");* FileOutputStream fos = new FileOutputStream("test.txt");){}** JDK9 新特性【了解】* 在 try前边定义流对象* 在 try 括号中引入流对象名称 ,不用写 finally* 例如:* FileInputStream fis = new FileInputStream("test.txt");* FileOutputStream fos = new FileOutputStream("test.txt");* try(fis ; fos){}*/try {//1、创建 FileInputStream对象,参数为绑定的数据源fis = new FileInputStream("D:/test.txt");//2、读取文件 read ,当读到结尾的时候返回 -1 , 注意需要用一个变量来接收 read返回值,不要读两次/*int len = 0;while((len = fis.read())!= -1){System.out.println((char)len);};*//*** 一次读取多个字节的方法,byte[] 起到缓冲作用,存储每次读取到的字节个数。数组的长度一般定义为1024(1kb)或整数倍*/byte[] bytes = new byte[2];int lens = fis.read(bytes);System.out.println(lens);//2 每次读取字节的个数System.out.println(Arrays.toString(bytes)); //[97, 98]System.out.println(new String(bytes));//ab} catch (IOException e) {e.printStackTrace();}finally {if(fis != null){//3、关闭流try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
}
FileOutputStream
把内存中的数据写入到硬盘的文件中
/*** FileOutputStream: 文件输出流,将内存数据写入到文件中* 构造方法: FileOutputStream(String name) 传入一个文件的路径* FileOutputStream(File file) 传入一个文件* FileOutputStream(String name,boolean append) 当 append为true 的时候,就不会覆盖文件,继续在文件的末尾追加写数据* 构造方法的作用:* 1、创建一个 FileOutputStream 对象* 2、会根据构造方法中传递的文件/文件路径,创建一个空的文件* 3、会把 FileOutputStream 对象指向创建好的文件* 写数据的原理* java程序---JVM--- OS(操作系统)---将数据写入文件中* 写换行:换行符* windows \r\n* linux /n* max /r*/
public class MyOutputStream {public static void main(String[] args) {FileOutputStream fos = null;{try {//1、创建一个 FileOutputStream对象fos = new FileOutputStream("D:/test.txt");/*** 2、调用 FileOutputStream对象的 writer方法,将数据写入文件* 会把十进制的整数,转为二进制存入硬盘.任意的记事本,打开时都会查询编码表,把字节转为字符表示。查询 ASKII码* 所以 test.txt中存的是 d*/fos.write(100);//写出多个字节byte[] b = "你好".getBytes();fos.write(b);} catch (IOException e) {e.printStackTrace();}finally {if(fos != null){//3、释放资源,流使用会占用一定的内存,因此需要释放try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}}
}
五、字符流
当使用字节流读取文本时,可能会有一个问题。就是遇到中文字符时,可能不会显示完整的字符,因为一个中文字符可能占用多个字节存储。所以 Java提供一些字符流,以字符为单位读写数据,专门用于处理文本文件。
字符输入流【Reader】:java.io.Reader 抽象类是读取字符流所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法:
public int read() | 从输入流读取一个字符 |
public int read(char cbuf[]) | 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 |
abstract public void close() | 关闭此流并释放与此流相关联的任何系统资源 |
FileReader 文件字符输入流,继承 InputStreamReader 。
/*** 字符输入流 Reader 输入流的最顶层父类* FileReader 构造方法:* FileReader(String fileName)* FileReader(File file)* 作用:* 1、创建一个 FileReader 对象* 2、会把 FileReader 对象指向要读取的文件***/
public class MyReader {public static void main(String[] args) {FileReader fr = null;try {//1、创建 FileReader对象,参数中绑定读取的资源fr = new FileReader("test.txt");//2、使用 read读取当个字符并返回int len = 0;/*while((len = fr.read()) != -1){System.out.print((char)len); //你好!}*///读取多个字符char[] cs = new char[1024];while((len = fr.read(cs)) != -1){System.out.printf(new String(cs,0,len));}} catch (IOException e) {e.printStackTrace();}finally {if(fr != null){//3、释放资源try {fr.close();} catch (IOException e) {e.printStackTrace();}}}}
}
字符输出流【Writer】:java.io.Writer 抽象类是所有输出字符流的最顶层父类。它定义了字符输入流的基本共性功能方法:
public void write(int c) | 写入单个字符 |
public void write(char cbuf[]) | 写入字符数组 |
abstract public void write(char cbuf[], int off, int len) | 写入字符数组的某一部分 |
public void write(String str) | 写入字符串 |
public void write(String str, int off, int len) | 写入字符串的某一部分 |
abstract public void flush() | 刷新流的缓冲 |
abstract public void close() | 关闭此流,但先要刷新它 |
六、Properties 集合
/*** java.util.Properties 集合 extends Hashtable<k,v>* Properties 类表示一个持久的属性集。Properties 可保存在流中或从流中加载。* Properties 集合是一个唯一和 IO流相结合的集合,* 可以使用集合中的方法 store() ,把集合中的临时数据,持久化到硬盘中* load(), 把硬盘中的数据读取到集合中* Properties 集合是一个双列集合,key 和 value 都是字符串**/
public class MyProperties {public static void main(String[] args) {// 使用 Properties 集合存储数据,遍历取出数据//1、创建 Properties 对象Properties prop = new Properties();//2、添加数据prop.setProperty("you","小三");prop.setProperty("mine","正房");prop.setProperty("she","小四");/*** 3、将数据写入到磁盘中保存* store(OutputStream out, String comments)* store(Writer writer, String comments) 可以写中文*/FileReader fr = null;FileWriter fw = null;try {fw = new FileWriter("test.txt");fr = new FileReader("test.txt");/*** 文件中的内容如下:* #save data* #Sun Nov 01 16:26:13 CST 2020* you=小三* she=小四* mine=正房*/prop.store(fw, "save data"); //第二个参数是注释/*** load 将文件中的数据读取:* 存储键值对的文件中,键与值默认的连接符号可以是 =,空格(其它符号)* # 表示注释* 键和值默认都是字符串*/Properties propRead = new Properties();propRead.load(fr);//将在数据到 PropertiesSet<String> strings = propRead.stringPropertyNames();//获取 key列表/*** 输入为:* you = 小三* she = 小四* mine = 正房*/for(String key: strings){System.out.println(key + " = " + propRead.get(key));}} catch (IOException e) {e.printStackTrace();}finally {if(fw != null && fr != null){try {fw.close();fr.close();} catch (IOException e) {e.printStackTrace();}}}}
}
七、缓冲流
缓冲流也叫高效流,是对 4个基本的 Filexxx流的增强,所以也是4个流,按照数据类型分为:
【1】字节缓冲流:BufferedInputStream,BufferedOutputStream
【2】字符缓冲流:BufferedReader,BufferedWriter
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲数组,通过缓冲区读写,减少系统 IO次数,从而提高效率。
字节缓冲输出流:BufferedOutputStream
/*** 继承 OutputStream 提高写入效率* 构造方法:* BufferedOutputStream(OutputStream out) 创建一个新的缓冲区输出流,以将数据写入指定的底层输出流,默认缓冲区大小= 8192* BufferedOutputStream(OutputStream out, int size) 创建一个新的缓冲区输出流,以将具体指定缓冲区大小的数据写入底层输出流*/
public class MyBufferedOutputStream {public static void main(String[] args) {FileOutputStream fos = null;BufferedOutputStream bos = null;try {//1、创建字节输出流 FileOutputStreamfos = new FileOutputStream("test.txt");//2、创建缓冲流 BufferedOutputStreambos = new BufferedOutputStream(fos);//3、使用 writer 方法写入内部缓冲区中bos.write("使用内部缓冲区".getBytes());//4、flush 将内部缓冲区的数据刷新到文件中bos.flush();} catch (IOException e) {e.printStackTrace();}finally {if(bos != null){//5、close 关闭流,会先执行 flush后关闭try {bos.close(); //会自动关闭 fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}
字节缓冲输入流:BufferedInputStream
/*** 继承 InputStream 称为 字节缓冲输入流* 构造方法:* BufferedInputStream(InputStream in)* public BufferedInputStream(InputStream in, int size)*/
public class MyBufferedInputStream {public static void main(String[] args) {//1、创建 FileInputStream对象FileInputStream fis = null;BufferedInputStream bis = null;try {fis = new FileInputStream("test.txt");//2、创建 BufferedInputStream 对象,提高 FileInputStream对象读取的效率bis = new BufferedInputStream(fis);//3、使用 read方法读取数据int len = 0;byte[] bytes = new byte[1024];while((len = bis.read(bytes)) != -1){System.out.println(new String(bytes,0,len));}} catch (IOException e) {e.printStackTrace();}finally {//4、关闭流if(bis != null){try {bis.close(); //自动关闭 fis} catch (IOException e) {e.printStackTrace();}}}}
}
BufferedWriter :新方法 newLine() 表示换行,替换了 “\r\n" BufferedReader:新方法 readLine() 读取一个文本行,读取一行数据。如果到达流末尾,则返回 null。
八、转换流
字符编码 Character Encoding:就是一套自然语言的字符与二进制数之间的对应规则;
字符集 Charset:也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。常见字符集有 ASCII、GBK、Unicode字符集。
在 IDEA中,使用 FileReader读取项目中的文本文件,由于 IDEA 默认使用 UTF-8编码,所有没有任何问题。但是当读取 Windows系统中创建的文本文件时,由于 Windows系统的默认是 GBK编码,就会出现乱码。
转化流 InputStreamReader:是 Reader的子类,是从字节流到字符流的桥梁,他读取字节,并使用指定的字符集将其解码为字符,它的字符集可以由名称指定,也可以接收平台默认的字符集。
/*** InputStreamReader:是 Reader的子类,是从字节流到字符流的桥梁,他读取字节,并使用指定的字符集将其解码为字符,它的字符集可以由名称指定,也可以接收平台默认的字符集。* 构造方法:* InputStreamReader(InputStream in)* InputStreamReader(InputStream in, String charsetName)*/
public class MyInputStreamReader {public static void main(String[] args) {//1、创建 InputStreamReader对象,构造方法中传入字节输入流和指定的编码表名称 指定的编码要与文件的编码相同,否则会发生乱码;InputStreamReader isr = null;try {isr = new InputStreamReader(new FileInputStream("text.txt"), "GBK");//2、使用 read 方法读取文件int len = 0;while((len = isr.read()) != -1){System.out.println((char)len);}} catch (IOException e) {e.printStackTrace();}finally {if(isr != null){//3、释放资源try {isr.close();} catch (IOException e) {e.printStackTrace();}}}}
}
OutputStreamWriter:是 Writer的子类,是从字符流到字节流的桥梁,他写入数据,并使用指定的字符集将其编码为字符,它的字符集可以由名称指定,也可以接收平台默认的字符集。
/*** java.io.OutputStreamWriter 继承了 Writer* OutputStreamWriter 是字符流通向字节流的桥梁,可使用指定的 charset 将要写入流中的字符编码成字节。* 构造方法:* OutputStreamWriter(OutputStream out) 使用默认的字符编码* OutputStreamWriter(OutputStream out, Charset cs) 可以指定字符编码,不区分大小写**/
class MyOutputStreamWriter {public static void main(String[] args) {//1、创建一个 OutputStreamWriter 对象OutputStreamWriter osw = null;try {osw = new OutputStreamWriter(new FileOutputStream("text.txt"), "GBK");//2、使用 writer 写出数据osw.write("你好");//3、flush 刷新数据osw.flush();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {//4、关闭流if(osw != null){try {osw.close();} catch (IOException e) {e.printStackTrace();}}}}
}
九、序列化流
把对象以流的方式写入到文件中保存,对象中不仅仅是字符,也有字节。就有了 ObjectOutputStream[对象的序列化 writeObject§] 和 ObjectInputStream[对象的反序列化 readObject()]
ObjectOutputStream 对象序列化流:
/*** java.io.ObjectOutputStream extends OutputStream* 构造器:* ObjectOutputStream(OutputStream out) 创建写入指定 OutputStream 的 ObjectOutputStream* 特有的成员方法:writeObject*/
public class MyObjectOutputStream {public static void main(String[] args) {//1、创建 ObjectOutputStream 对象,构造方法中传递字节输出流ObjectOutputStream oos = null;try {oos = new ObjectOutputStream(new FileOutputStream("text.txt"));//2、通过 writeObject 把对象写入到文件中oos.writeObject(new Person("张三",1));//通过二进制序列化流存储的,无法打开查看。} catch (IOException e) {e.printStackTrace();}finally {//3、关闭流try {oos.close();} catch (IOException e) {e.printStackTrace();}}}
}
ObjectInputStream 对象反序列化流:
/*** java.io.ObjectInputStream 继承了 InputStream 将对象从文件中读取使用* 构造方法:* ObjectInputStream(InputStream in) 创建从指定 InputStream 读取的 ObjectInputStream* 特有的方法:* readObject() 返回一个 object对象** transient 关键字:* static 关键字:静态关键字,被 static修饰的成员变量不能被序列化的,序列化的都是对象的默认值。transient 与 static的作用是一样的,但却没有 static的含义* Person对象需要实现 Serializable 并且要定义序列化ID* 集合类的存储和对象相同*/
public class MyObjectInputStream {public static void main(String[] args) {//1、创建 ObjectInputStream对象,构造方法中传递字节输入流ObjectInputStream ois = null;try {ois = new ObjectInputStream(new FileInputStream("text.txt"));//2、使用 readObject 方法读取对象Person o = (Person)ois.readObject();//4、对象使用} catch (Exception e) {e.printStackTrace();}finally {if(ois != null){//3、释放资源try {ois.close();} catch (IOException e) {e.printStackTrace();}}}}
}
十、打印流
PrintStream:我们常用的 System.out.println 就是打印流。
/*** 可以打印各种数据值表示形式,不会抛出 IOException,有特有的方法 print println* 构造方法:* PrintStream(File file) 输出的是一个文件* PrintStream(OutputStream out) 输出的是一个字节输出流* PrintStream(String fileName) 输出的是一个文件路径* 继承了 OutputStream 拥有该成员中的方法* 注意事项:如果使用继承自父类中的 write方法写数据,那么会查询编码表。如果使用 print 就会原样使用。* 可以改变输出语句的目的地:System.setOut() 目的地通过参数传递*/
public class MyPrintStream {public static void main(String[] args) throws FileNotFoundException {//创建打印流,绑定要输出的目的地PrintStream ps = new PrintStream("text.txt");//使用 write 和 print写数据ps.write(97);//文件中为 aps.print(97);//文件中为 97//设置输出流打印的目的地System.setOut(ps);System.out.println("此打印信息会在 text.txt文件中显示");//释放资源ps.close();}
}
十一、网络通信
【1】InetAddress:用于表示网络上的硬件资源,即 IP地址。没有公有的构造函数,只能通过静态方法来创建实例。
InetAddress.getByName(String host);
InetAddress.getByAddress(byte[] address);
【2】URL:统一资源定位符。可以直接从 URL中读取字节流数据。
public static void main(String[] args) throws IOException {URL url = new URL("http://www.baidu.com");/* 字节流 */InputStream is = url.openStream();/* 字符流 */InputStreamReader isr = new InputStreamReader(is, "utf-8");/* 提供缓存功能 */BufferedReader br = new BufferedReader(isr);String line;while ((line = br.readLine()) != null) {System.out.println(line);}br.close();
}
【3】Sockets:使用 TCP协议实现网络通信;ServerSocket:服务器端类,Socket:客户端类。服务器和客户端通过 InputStream 和 OutputStream 进行输入输出。
【4】Datagram:使用 UDP协议实现网络通信。DatagramSocket:通信类。DatagramPacket:数据包类。
思考: Java 字节读取流的 read方法返回 int的原因?
读取二进制数据按字节读取,每次读一个字节(byte)。read()的底层是由 C++实现的,返回的是 unsigned byte,取值范围为[0~255],在 java中 byte只能表示 [-128,127]的无符号数,所以只能用 int类型接收,Java接收得到的就是 int[0~255]。
相关文章:

IO 流分类
一、File File 类(磁盘操作)可以用于表示文件和目录的信息,但是它不表示文件的内容。递归地列出一个目录下所有文件: public static void listAllFiles(File dir) {if (dir null || !dir.exists()) {return;}if (dir.isFile())…...

JVM的主要组成部分,以及它们的作用。JVM中的内存区域有哪些,它们各自的作用是什么?什么是Java的堆内存,它如何影响程序的性能?
JVM的主要组成部分,以及它们的作用 JVM(Java虚拟机)的主要组成部分包括类加载器(Class Loader)、运行时数据区(Runtime Data Area)、执行引擎(Execution Engine)、本地库…...

Qt QWidget以及各种控件、布局 核心属性(适合入门使用时查询)
目录 1. QWidget核心属性 2. 按钮类控件 2.1 PushButton 核心属性 2.2 RadioButton 核心属性 2.3 CheckBox 和 Tool Button 核心属性 3. 显示类控件 3.1 Label 核心属性 3.2 LCDNumber 核心属性 3.3 ProgressBar 核心属性 3.4 Calendar Widget 核心属性 4. 输入类控…...

svg图片构造QGraphicsSvgItem对象耗时很长的问题解决
目录 1. 问题的提出 2. 问题解决 1. 问题的提出 今天通过一张像素为141 * 214,大小为426KB的svg格式的图片构造QGraphicsSvgItem对象,再通过Qt的Graphics View Framework框架,将QGraphicsSvgItem对象显示到场景视图上,代码如下&…...

边坡位移监测设备:守护工程安全的前沿科技
随着现代工程建设的飞速发展,边坡位移监测作为预防山体滑坡、泥石流等自然灾害的重要手段,日益受到人们的关注。边坡位移监测设备作为这一领域的关键技术,以其高精度、实时监测的特点,成为守护工程安全的重要武器。 一、边坡位移…...

Qt使用单例模式读取xml文件
Qt使用单例模式读取xml文件 一、单例模式介绍1、什么是单例模式2、为什么使用单例模式3、什么情况下使用单例模式4、使用单例模式需要注意哪些问题线程安全 5、单例模式的类型6、单例类的特点 2、单例模式的实现2.1懒汉式2.2饿汉式 一、单例模式介绍 1、什么是单例模式 单例模…...

备战蓝桥杯 Day6(学习动态规划)
引入 支付问题 假设有无限多的硬币,硬币面值为1,5,11。现在需要支付15元,问最少使用的硬币数? 贪心策略:1511*11*4,145 真正的答案153*5 3 dp的两个性质 最优子结构无后效性 dp的两大要素 1.状态2.状态转移方程 思路…...

【uniapp】自定义步骤条样式
代码实现 <view class"steps-wrap"><view class"flex-box"><view class"number active-number">1</view><view class"desc active-desc">步骤1</view><view :class"[line, activeStep …...

UE5 C++ UObject实例化
一.创建UObject C类 在MyObject中声明结构体FMyDataTableStruct 在MyPawn里面,先将头文件里包含 MyObject.h 在MyPawn中声明一个UMyObject类型的指针 TSubclassOf 是提供 UClass 类型安全性的模板类。例如您在创建一个投射物类,允许设计者指定伤害类型…...

Appium环境安装与架构介绍
Appium架构 Appium 设计哲学 不需要为了自动化而重新编译或修改被测应用不应该让移动端自动化测试限定在某种语言或者某个具体的框架不要为了移动端的自动化测试而重新造轮子移动端自动化测试应该是开源的 Appium 架构 Appium 架构图如下: Appium 的核心是一个 …...

Vue+Vite项目初建(axios+Unocss+iconify)
一. 创建项目 npx --package vue/cli vue 项目成功启动后,进入http://localhost:3200,即可进入创建好的页面(假设启动端口为3200) 二. 测试网络通讯模块 假设有本地服务器地址localhost:8000提供接口服务,接口为localhost:8000/token&#…...

ASUS华硕枪神8笔记本电脑G614JIR,G814JVR,G634JYR,G834JZR工厂模式出厂Windows11系统 带重置还原功能
适用ROG枪神8系列笔记本型号: G614JIR、G614JVR、G634JYR、G634JZR G814JIR、G814JVR、G834JYR、G834JZR 链接:https://pan.baidu.com/s/1tYZt6XFNC2d6YmwTbtFN7A?pwd3kp8 提取码:3kp8 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主…...

Python入门:常用模块—xml模块
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单 xml的格式如下,就是通过<>节点来区别数据结构的: <data> <country name"Liechtenstein"> <rank updated"yes"…...

蓝队应急响应工具箱v2024.1
1 蓝队工具箱 v2024.1 2 简介 蓝队工具箱是为打造一款专业级应急响应的集成多种工具的工具集,由真实应急响应环境所用到的工具进行总结打包而来,由 ChinaRan404,W 啥都学,清辉等开发者编写.把项目现场中所用到的工具连同环境一同打包,并实…...

Linux中获取字符串长度与获取子字符串
一、 获取字符串长度 #!/bin/bash string"jobs" echo ${string} # 输出结果: jobs echo ${#string} # 输出结果: 4 二、提取子字符串 以下实例从字符串第 2 个字符开始截取 4 个字符: #!/bin/bash str"敢于亮剑决不后退" echo ${str:2:…...

Rust语言之sha-256爆破
文章目录 一、实现Sha-256加密1.创建项目2.编写Cargo.toml文件3.编写程序代码 二、sha256爆破1.获取命令行参数2.读取文件3.校验输入参数4.暴力破解 一、实现Sha-256加密 SHA-256是一种安全哈希算法,主要特点是将输入的数据(无论长度)通过特定…...

Rust中的字符串处理及相关方法详解
在Rust中,字符串是一种非常重要的数据类型,而String类型则提供了对动态可变字符串的支持。本文将介绍一些常见的字符串处理方法以及相关示例代码。 创建字符串 在Rust中,有多种方式创建字符串,以下是一些常见的例子:…...

NS安装-CentOS服务器安装Nightscout CGM
NS CGM 安装必要条件 有自己的云服务器好像没有2,有云服务器就行了 安装顺序 先安装数据库,目前支持的是 MongoDB ,官方推荐4,其实目前最新版本就行。可以用宝塔安装,比较简单克隆代码,我是放到 /opt/ns…...

利用ChatGPT提升工作效率
随着科技的飞速发展,人工智能逐渐成为我们生活的一部分。ChatGPT作为一种先进的自然语言处理技术,已经在各个领域取得了显著的成果。本文将探讨如何利用ChatGPT提升工作效率,让我们的生活变得更加便捷。 一、什么是ChatGPT? ChatG…...

django admin页面美化
美化 Django Admin 页面可以通过多种方式实现,从简单的 CSS 样式调整到完全自定义模板。以下是一些建议和步骤来美化 Django Admin 页面: 1. 使用 CSS 覆盖默认样式 这是最简单的方法,你可以通过添加自定义 CSS 文件来覆盖 Django Admin 的…...

Git 操作以及Git 常见问题
Git 操作 git 教程:https://www.runoob.com/git/git-tutorial.html 基本概念 工作区:克隆项目到本地后,项目所在的文件夹; 暂存区:从工作区添加上来的变更(新增,修改,删除ÿ…...

如何学习和规划类似ChatGPT这种人工智能(AI)相关技术
学习和规划类似ChatGPT这种人工智能(AI)相关技术的路径通常包括以下步骤: 学习基础知识: 学习编程:首先,你需要学习一种编程语言,例如Python,这是大多数人工智能项目的首选语言。数学…...

4 月 9 日至 4 月 10 日,Hack.Summit() 2024 首聚香江
Hack.Summit() 是一系列 Web3 开发者大会。2024 年的活动将于 2024 年 4 月 9 日至 4 月 10 日在香港数码港举行。自十年前首次举办以来,此次会议标志着 Hack.Summit() 首次在亚洲举办,香港被选为首次亚洲主办城市,这对 Hack VC 和该地区都具…...

[力扣 Hot100]Day29 删除链表的倒数第 N 个结点
题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 出处 思路 两个指针间隔n,一趟遍历解决。 代码 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* phead;ListNode* …...

探索设计模式的魅力:掌握命令模式-解锁软件设计的‘遥控器’
🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,并且坚持默默的做事。 引言:探索命令模式的奥秘 软件设计领域充满挑战与机遇,命令模式…...

LNMP搭建discuz论坛
discuz论坛是一种网络论坛软件,也称bbs,它是一种用于在互联网上建立论坛社区的程序系统。只哟中功能强大的论坛软件,可以帮助用户建立一个专业、完善的论坛社区,并且可以实现多种功能,如搭建用户注册、登录、查看主题、…...

257.【华为OD机试真题】幼儿园篮球游戏(贪心算法-JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…...

[计算机网络]深度学习传输层TCP协议
💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录专栏:深度学习传输层TCP协议 🎉欢迎大家点赞👍评论📝收藏⭐文章 [计算机网络]深度学习传输层TCP协议 前提概括一: TCP协议段格式二:确认应答三:超时重传四:…...

动态头部:统一目标检测头部与注意力
摘要 在目标检测中,定位与分类相结合的复杂性导致了各种方法的蓬勃发展。以前的工作试图提高在不同的目标检测头的性能,但未能呈现一个统一的视图。在本文中,我们提出了一种新的动态头部框架来统一目标检测头部和注意力。通过在尺度感知的特…...

【状态估计】深度传感器与深度估计算法(1/3)
深度传感器与深度估计算法 深度传感器概念 获得空间中目标位置或距离的传感器,按接收的媒介波来源可分为主动式和被动式两大范畴,主动式包括激光雷达、雷达、超声波传感器等,被动式主要为单目、多目相机等,同时两大类可组合为混…...