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

JavaIO流

JavaIO流

  • 一、概念
  • 二、File类
  • 三、File类的使用
    • 1、File文件/文件夹类的创建
    • 2、File类的获取操作
    • 3、File类判断操作 - boolean
    • 4、File类对文件/文件夹的增删改
    • 5、File类的获取子文件夹以及子文件的方法
  • 四、Java中IO流多种维度的维度
    • 1、按照流向 - Java程序
    • 2、按照流的大小分类
    • 3、按照流的功能分类
  • 五、JavaIO流的四大基类
    • 1、InputStream
    • 2、OutputStream
    • 3、Reader
    • 4、Writer
    • 5、补充知识点——方法递归
  • 六、JavaIO流中的常用实现类
    • 1、节点流
    • 2、处理流

一、概念

Java Input/Output,一般情况指的是Java操作一些外部数据时,使用IO流的形式进行操作,外部数据主要包括文件、网络等等。

二、File类

JavaIO既可以操作文件外部数据,还可以操作网络端口这种外部数据,如果Java要操作文件外部数据,必须要借助一个类File文件对象类。

File类是Java中对文件/文件夹的抽象表示,通过这个File类,我们可以将操作系统本地的一个文件/文件夹加载到Java程序当中,随后通过File对象可以对文件进行增删改查等操作。

File类只能操作文件的外部内容、而文件当中有哪些数据,这个操作File类做不到。

三、File类的使用

1、File文件/文件夹类的创建

根据全路径创建

File file = new File("d:" + File.separator + "桌面" + File.separator + "a");

根据父子路径创建

File file = new File("d:\\桌面" ,"a");

根据父子路径创建,只不过父路径也是File对象

File file = new File(new File("d:\\桌面") ,"a");

2、File类的获取操作

//在eclipse中,因为创建的时Java项目,Java项目中所有的相对路径,指的都是项目名下的某个路径 而非Java源文件的同级路径
File file1 = new File("a/a.txt");
//获取文件名 路径最后一个文件/文件夹的名字
String fileName = file.getName();
System.out.println(fileName);
//获取文件的父路径 取决于你再构建File对象时有没有传入父路径
String parent = file.getParent();
System.out.println(parent);
//获取文件的路径 ---传入的路径
String path = file.getPath();
System.out.println(path);
//获取文件的绝对的路径--传入路径没有关系的
String absolutePath = file1.getAbsolutePath();
System.out.println(absolutePath);

3、File类判断操作 - boolean

System.out.println(file1.exists());//判断路径是否存在
System.out.println(file1.isFile());//判断是否是文件
System.out.println(file1.isDirectory());//判断是否是目录
System.out.println(file1.isHidden());//判断是否是隐藏文件System.out.println(file1.canRead());//可读
System.out.println(file1.canWrite());//可写
System.out.println(file1.canExecute());//可执行

4、File类对文件/文件夹的增删改

创建:

  • 创建文件createNewFile():要求父目录必须存在

  • 创建文件夹mkdir()创建单层目录/mkdirs()创建多层目录

删除:

  • delete()–如果是目录,目录必须空目录

修改:

  • renameTo(File):boolean
boolean mkdir = file1.mkdirs();//创建文件夹
System.out.println(mkdir);boolean creatNewFile = file1.createNewFile();//创建文件
System.out.println(creatNewFile);boolean delete = file1.delete();
System.out.println(delete);
//重命名要求两个路径必须在同一个路径下
boolean result = file1.renameTo(new File("KK"));
System.out.println(result);

5、File类的获取子文件夹以及子文件的方法

listFiles()

list():返回指定目录下的下一级的文件或者文件夹

四、Java中IO流多种维度的维度

1、按照流向 - Java程序

输入流 Input/Reader

输出流 Output/Writer

2、按照流的大小分类

字节流:Stream——什么样的数据都可以处理

字符流:Reader/Writer——只能处理纯文本类型的数据

3、按照流的功能分类

节点流:直接对接到数据源上的流
常用的节点流:文件流、数组流、网络流

处理流:无法直接对接到数据源上,而是包装了节点流,在节点流基础之上提供了更加强大的功能

五、JavaIO流的四大基类

Javaio流中所有的流都有四个顶尖父类,四个顶尖父类是四个抽象类,四个抽象类当中封装了和流有关的很多的公用方法。

1、InputStream

Java中所有字节输入流的顶尖父类 —— 一个字节一个字节的读取文件中的数据

read:int——读取的字节,全部读取完成后返回-1

available:int——可利用的字节数,还能读取的字节数

close()——关闭IO流,任何IO流都需要手动关闭

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;/**
* InputStream:是一个字节输入流
*/
public class Demo01 {public static void main(String[] args) {InputStream is = null;try {is = new FileInputStream(new File("kl/a.txt"));//读取数据源的一个字节,read每一次读取完成,下一次再进行读取,基于上一次的结果向后读取int read = is.read();System.out.println(read);//返回值,如果是read()方法,代表的是每一次读取完成的字节的值,read(byte[])的话返回值不做研究//不管什么情况下,read的返回值一旦为-1,那么代表数据与没数据了int read2 = is.read();System.out.println(read2);byte[] array = new byte[12];int read3 = is.read(array);String string = new String(array,"UTF-8");System.out.println(string);//字节流中可以利用的字节数有多少int available = is.available();System.out.println(available);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(is!=null) {try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

2、OutputStream

Java中所有字节输出流的顶尖父类

write:写出的字节

close()

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;/*** OutputStream基类提供的常用方法:*   write(int字节)*/
public class Demo02 {public static void main(String[] args) {OutputStream os = null;try {os = new FileOutputStream(new File("kl/a.txt"));os.write(97);//a 覆盖写os.write("中国加油".getBytes("UTF-8"));//中国加油//os.write("中国加油".getBytes("UTF-8"),0,6);//中国} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(os != null) {try {os.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

复制照片到指定路径

package com.nuc.kl.file.io;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;/**
*
* @author 冰霜中的独舞
* @version 2023年7月7日 上午9:15:11
*
*/
public class FileCopy {public static void main(String[] args) {InputStream is = null;OutputStream os = null;try {is = new FileInputStream(new File("D:\\2023PracticalTraining\\software\\workspace\\eclipseworkspace\\java-study-619\\picture\\c.png"));os = new FileOutputStream(new File("D:\\2023PracticalTraining\\software\\workspace\\eclipseworkspace\\java-study-619\\picture\\d.png"));//byte[] buf = new byte[1024 * 1024];int read;while((read = is.read()) != -1) {os.write(read^5);}
//			while((read = is.read(buf)) != -1) {
//				os.write(buf);
//			}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if(os != null) {try {os.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(is != null) {try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;/**
* 循环读取加密文件的1024个字节,然后对下一个字节进行解密操作^5
* 输入流(加密文件) 输出流(解密文件路径)
* 每隔1024个字节,对下一个字节进行^5运算进行加密
*/
public class Homework {public static void main(String[] args) {InputStream is =null;OutputStream os =null;try {is = new FileInputStream(new File("D:\\Desktop\\a.png"));os = new FileOutputStream(new File("D:\\Desktop\\b.png"));//循环读取is中的数据,一次读取1024个字节byte[] by = new byte[1024];while(is.read(by) != -1) {os.write(by);int r = is.read()^5;os.write(r);}System.out.println("解密完成!");} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(os != null) {try {os.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(is != null) {try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

3、Reader

Java中所有字符输入流的顶尖父类

因为要根据编码集进行数据的读取,一次要读取一个字符,而一个字符对应了多个字节。编码集只有纯文本才有编码集。

  • read()
  • close()
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Arrays;/**
* Read的常用方法
* 	close()
*/
public class Demo03 {public static void main(String[] args) throws IOException {Reader r = new FileReader(new File("kl/a.txt"));int read = r.read();System.out.println(read);int read1 = r.read();System.out.println(read1);char c = (char)read1;System.out.println(c);char[] buf = new char[10];r.read(buf);System.out.println(Arrays.toString(buf));System.out.println(buf);r.close();}
}
a中国加油

image-20230708091439797

4、Writer

Java中所有字符输出流的顶尖父类

  • write
  • close —— 底层调用了flush
  • flush —— 字符流一次输出多个字节,先把多个字节缓存起来,直到遇到flush方法才会把缓存起来的结果输出
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Demo04 {public static void main(String[] args) throws IOException {Writer w = new FileWriter(new File("kl/a.txt"));w.append('a');w.write("zs12333");w.write("ls12333");w.flush();w.close();}
}

5、补充知识点——方法递归

方法迭代其实就是一种循环,只不过这个循环比较特殊,循环我们只知道循环的终止条件,而循环的次数我们是不太清楚的

使用方法

1、将需要重复性执行的代码抽取到一个方法中

2、方法中需要对重复性执行的代码进行改造,有一个递归入口(自己调用自己的一个逻辑)、递归出口

/**
* 使用方法递归计算 ∑100
*/
public class RecursionStudy {public static void main(String[] args) {int num = 0;//for循环for (int i = 0; i <= 100; i++) {num = i + num;}System.out.println(num);//迭代System.out.println(sum(100));}public static int sum(int num) {if(num == 1) {return 1;}else {return num + sum(num-1);}}
}

六、JavaIO流中的常用实现类

1、节点流

直接连接数据源的流

  • 数组流:连接的数据源是一个数组

    • 字节数组流
      • ByteArrayInputStream——字节数组输入流
      • ByteArrayOutputStream——字节数组输出流-----输出的目的地是一个字节数组,只不过这个字节数组不需要我们创建传递,因为这个流底层封装了一个字节数组用于接收字节数据的输出
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;public class Dmeo01 {public static void main(String[] args) throws IOException, InterruptedException {ByteArrayInputStream basi =new ByteArrayInputStream("中国加油".getBytes("UTF-8"));byte[] by = new byte[12];basi.read(by);System.out.println(new String(by,"UTF-8"));ByteArrayOutputStream baos = new ByteArrayOutputStream();System.out.println(baos);baos.write("中国加油!".getBytes("UTF-8"));System.out.println(baos);String string = baos.toString("UTF-8");System.out.println(string);}
    }
    
    • 字符数组流
      • CharArrayReader——字符数组输入流
      • CharArrayWriter——字符数组输出流
  • 文件流:连接的数据源是一个文件

    • 字节流——什么文件都可以处理
      • FileInputStream
        • new FileInputStream(File)
        • new FileInputStream(String path)
        • 【注意】:文件必须存在,不存在报错
      • FileOutputStream
        • new FileOutputStream(File|String)——默认是覆盖写,因为boolean append默认为false
        • new FileOutputStream(File|String,boolean append)——追加写
        • 【注意】:文件可以不用提前存在,如果文件不存在会自动创建
    • 字符流——只能处理纯文本文件
      • FileReader
        • new FileReader(String|File)
      • FileWriter
        • new FileWriter(File|String)—默认是覆盖写
        • new FileWriter(File|String,boolean append)
        • 写出数据之后,必须flush()刷新
  • 网络流

2、处理流

处理流:对节点流进行包装,提供一些更加强大的功能——处理速度快。

  • 缓冲流:缓冲流包装另外一个流,缓冲流内部维护一个缓冲池,使用了缓冲流,一次读取多个字节、多个字符到缓冲流的内部的缓冲池当中。—— 不管是字节的还是字符的缓冲流,一定要flush。
    • 字节缓冲流 —— 缓冲了一个8192的字节数组
      • BufferedInputStream
      • BufferedOutputStream
    • 字符缓冲流
      • BufferedReader——提供了一个特殊的方法:readLine()
      • BufferedWriter——提供了一个特殊的方法:newLine()
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class Demo01 {public static void main(String[] args) throws Exception {BufferedReader br = new BufferedReader(new FileReader("wc.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("wc_n.txt"));String line = null;while((line = br.readLine()) != null) {line = line.toUpperCase();bw.write(line);bw.newLine();bw.flush();}bw.close();br.close();System.out.println("输出完成!");}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class Demo01 {public static void main(String[] args) throws Exception {BufferedReader br = new BufferedReader(new FileReader("wc.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("wc_n.txt"));String line = null;while((line = br.readLine()) != null) {line = line.toUpperCase();bw.write(line);bw.newLine();bw.flush();}bw.close();br.close();System.out.println("输出完成!");}
}
  • 字节转字符流:以指定的编码集将一个字节流转换为字符流进行处理,加快我们的处理速度—纯文本类型的IO流有效

    • InputStreamReader(InputStream,charset)
    • OutputStreamWriter(OutputStream,charset)
  • 对象流——只有字节流

    • Java中的序列化(Java对象转换成二进制编码)和反序列化(Java二进制编码转换为Java对象)机制的问题

    • 序列化和反序列化需要用到Java的两个IO流

      • ObjectInputStream
      • ObjectOutputStream
      import java.io.FileInputStream;
      import java.io.FileNotFoundException;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.ObjectInputStream;
      import java.io.ObjectOutputStream;public class Demo01 {public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {/*** 序列化的代码*/
      //		Student s = new Student("zs",20,"男");
      //		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.txt"));
      //		oos.writeObject(s);
      //		oos.flush();
      //		oos.close();
      //		System.out.println("对象序列化完成!");/*** 反序列化的代码*/ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.txt"));Object object = ois.readObject();System.out.println(object);}
      }
      
    • 我们的Java对象如果想要序列化,那么必须得声明它能序列化,Java中对象默认不具备序列化的能力。如果想要具备,那么必须实现两个接口其中一个即可,序列化就是把对象的属性值转换成为二进制

      • Serializable:static或者transient修饰的属性不会序列化
      import java.io.Externalizable;
      import java.io.Serializable;
      import java.util.Objects;/**
      * JavaBean:只要私有化的属性和公开的get和set方法还有hashCode、equals、toString以及构造器
      */
      public class Student implements Serializable {private String name;private transient Integer student_age;private String student_sex;public Student() {super();}public Student(String name, Integer student_age, String student_sex) {super();this.name = name;this.student_age = student_age;this.student_sex = student_sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getStudent_age() {return student_age;}public void setStudent_age(Integer student_age) {this.student_age = student_age;}public String getStudent_sex() {return student_sex;}public void setStudent_sex(String student_sex) {this.student_sex = student_sex;}@Overridepublic int hashCode() {return Objects.hash(name, student_age, student_sex);}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;return Objects.equals(name, other.name) && Objects.equals(student_age, other.student_age)&& Objects.equals(student_sex, other.student_sex);}@Overridepublic String toString() {return "Student [name=" + name + ", student_age=" + student_age + ", student_sex=" + student_sex + "]";}
      }
      

      image-20230708174435258

      • Externalizable:必须重写两个方法,一个序列化写出的方法,一个反序列化读取的方法
      import java.io.Externalizable;
      import java.io.IOException;
      import java.io.ObjectInput;
      import java.io.ObjectOutput;
      import java.io.Serializable;
      import java.util.Objects;/**
      * JavaBean:只要私有化的属性和公开的get和set方法还有hashCode、equals、toString以及构造器
      */
      public class Student implements Externalizable {private static final long serialVersionUID = 1L;private String name;private transient Integer student_age;private String student_sex;public Student() {super();}public Student(String name, Integer student_age, String student_sex) {super();this.name = name;this.student_age = student_age;this.student_sex = student_sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getStudent_age() {return student_age;}public void setStudent_age(Integer student_age) {this.student_age = student_age;}public String getStudent_sex() {return student_sex;}public void setStudent_sex(String student_sex) {this.student_sex = student_sex;}@Overridepublic int hashCode() {return Objects.hash(name, student_age, student_sex);}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Student other = (Student) obj;return Objects.equals(name, other.name) && Objects.equals(student_age, other.student_age)&& Objects.equals(student_sex, other.student_sex);}@Overridepublic String toString() {return "Student [name=" + name + ", student_age=" + student_age + ", student_sex=" + student_sex + "]";}@Overridepublic void writeExternal(ObjectOutput out) throws IOException {out.writeUTF(name);out.writeInt(student_age);}@Overridepublic void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {name = in.readUTF();student_age = in.readInt();}
      }
      

      image-20230708175017231

      • 序列化版本id,是为了告诉编译器,序列化的二进制和我们当前项目中的类是否为同一个版本,如果是不同的版本,那么报错。
  • 打印流——只有输出流——提供了一系列重载的print和println方法用于输出数据

    • PrintStream
    • PrintWriter
  • Java中标准输入和标准输出流

    • System.in
    • System.out
    • System.setIn(InputStream)
    • System.setOut(OutputStream)

相关文章:

JavaIO流

JavaIO流 一、概念二、File类三、File类的使用1、File文件/文件夹类的创建2、File类的获取操作3、File类判断操作 - boolean4、File类对文件/文件夹的增删改5、File类的获取子文件夹以及子文件的方法 四、Java中IO流多种维度的维度1、按照流向 - Java程序2、按照流的大小分类3、…...

FlinkSql 如何实现数据去重?

摘要 很多时候flink消费上游kafka的数据是有重复的&#xff0c;因此有时候我们想数据在落盘之前进行去重&#xff0c;这在实际开发中具有广泛的应用场景&#xff0c;此处不说详细代码&#xff0c;只粘贴相应的flinksql 代码 --********************************************…...

机器学习概念

目录 一、人工智能、机器学习、深度学习的关系 二、什么是深度学习&#xff1f; 2.1 深度学习常用算法 一、人工智能、机器学习、深度学习的关系 人工智能、机器学习和深度学习的关系如下所示。 二、什么是深度学习&#xff1f; 深度学习( DL, Deep Learning) 是机器学习 …...

【数据结构】排序(插入、选择、交换、归并) -- 详解

一、排序的概念及其运用 1、排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记…...

游戏中的图片打包流程,免费的png打包plist工具,一款把若干资源图片拼接为一张大图的免费工具

手机游戏开发中&#xff0c;为了提高图片渲染性能&#xff0c;经常需要将小图片合并成一张大图进行渲染。如果手工来做的话就非常耗时。TexturePacker就是一款非常不错方便的处理工具。TexturePacker虽然非常优秀&#xff0c;但不是免费的。 对于打包流程&#xff0c;做游戏的…...

Springboot实现ENC加密

Springboot实现ENC加密 1、导入依赖2、配置加密秘钥&#xff08;盐&#xff09;3、获取并配置密文4、重启项目测试5、自定义前缀、后缀6、自定义加密方式 1、导入依赖 关于版本&#xff0c;需要根据spring-boot版本&#xff0c;自行修改 <dependency><groupId>co…...

nginx 托管vue项目配置

server {listen 80;server_name your_domain.com;location / {root /path/to/your/vue/project;index index.html;try_files $uri $uri/ /index.html;} }奇怪的现象,在vue路由中/会跳转到/abc/def&#xff0c;但如果直接输入/abc/def会显示404&#xff0c;添加 try_files $uri…...

Vue3中如何进行封装?—组件之间的传值

用了很久一段时间Vue3Ts了&#xff0c;工作中对一些常用的组件也进行了一些封装&#xff0c;这里对封装的一些方法进行一些简单的总结。 1.props传递 首先在主组件进行定义传值 <template><div>这里是主组件<common :first"first"></common&…...

实训笔记8.25

实训笔记8.25 8.25笔记一、Flume数据采集技术1.1 Flume实现数据采集主要借助Flume的组成架构1.2 Flume采集数据的时候&#xff0c;核心是编写Flume的采集脚本xxx.conf1.2.1 脚本文件主要由五部分组成 二、Flume案例实操2.1 采集一个网络端口的数据到控制台2.1.1 分析案例的组件…...

vue自定义监听元素宽高指令

在 main.js 中添加 // 自定义监听元素高度变化指令 const resizerMap new WeakMap() const resizeObserver new ResizeObserver((entries) > {for (const entry of entries) {const handle resizerMap.get(entry.target)if (handle) {handle({width: entry.borderBoxSiz…...

网络爬虫到底是个啥?

网络爬虫到底是个啥&#xff1f; 当涉及到网络爬虫技术时&#xff0c;需要考虑多个方面&#xff0c;从网页获取到最终的数据处理和分析&#xff0c;每个阶段都有不同的算法和策略。以下是这些方面的详细解释&#xff1a; 网页获取&#xff08;Web Crawling&#xff09;&#x…...

前端行级元素和块级元素的基本区别

块级元素和行内元素的基本区别是&#xff0c; 行内元素可以与其他行内元素并排&#xff1b;块级元素独占一行&#xff0c;不能与其他任何元素并列&#xff1b; 下面看一下&#xff1b; <!DOCTYPE html> <html> <head> <meta charset"utf-8"&…...

CentOS 7用二进制安装MySQL5.7

[rootlocalhost ~]# [rootlocalhost ~]# ll 总用量 662116 -rw-------. 1 root root 1401 8月 29 19:29 anaconda-ks.cfg -rw-r--r--. 1 root root 678001736 8月 29 19:44 mysql-5.7.40-linux-glibc2.12-x86_64.tar.gz [rootlocalhost ~]# tar xf mysql-5.7.40-linux-…...

华为加速回归Mate 60发布, 7nm全自研工艺芯片

华为于今天12:08推出“HUAWEI Mate 60 Pro先锋计划”&#xff0c;让部分消费者提前体验。在华为商城看到&#xff0c;华为Mate 60 pro手机已上架&#xff0c;售价6999元&#xff0c;提供雅川青、白沙银、南糯紫、雅丹黑四种配色供选择。 据介绍&#xff0c;华为在卫星通信领域…...

Linux系列讲解 —— 【systemd】下载及编译记录

Ubuntu18.04的init程序合并到了systemd中&#xff0c;本篇文章记录一下systemd的下载和编译。 1. 下载systemd源码 (1) 查看systemd版本号&#xff0c;用来确定需要下载的分支 sunsun-pc:~$ systemd --version systemd 237 PAM AUDIT SELINUX IMA APPARMOR SMACK SYSVINIT UT…...

u-view 的u-calendar 组件设置默认日期后,多次点击后,就不滚动到默认日期的位置

场景&#xff1a;uniapp开发微信小程序 vue2 uview版本&#xff1a;2.0.36 &#xff1b; u-calendar 组件设置默认日期后 我打开弹窗&#xff0c;再关闭弹窗&#xff0c; 重复两次 就不显示默认日期了 在源码中找到这个位置进行打印值&#xff0c;根据出bug前后的值进行…...

vue naive ui 按钮绑定按键

使用vue (naive ui) 绑定Enter 按键 知识点: 按键绑定Button全局挂载使得message,notification, dialog, loadingBar 等NaiveUI 生效UMD方式使用vue 与 naive ui将vue默认的 分隔符大括号 替换 为 [[ ]] <!DOCTYPE html> <html lang"en"> <head>…...

Viobot基本功能使用及介绍

设备拿到手当然是要先试一下效果的&#xff0c;这部分可以参考本专栏的第一篇 Viobot开机指南。 接下来我们就从UI开始熟悉这个产品吧&#xff01; 1.状态 设备上电会自动运行它的程序&#xff0c;开启了一个服务器&#xff0c;上位机通过连接这个服务器连接到设备&#xff0c…...

《PMBOK指南》第七版12大原则和8大绩效域

《PMBOK指南》第七版12大原则 原则1&#xff1a;成为勤勉、尊重和关心他人的管家 原则2&#xff1a;营造协作的项目团队环境 原则3&#xff1a;有效地干系人参与 原则4&#xff1a;聚焦于价值 原则5&#xff1a;识别、评估和响应系统交互 原则6&#xff1a;展现领导力行为…...

docker 启动命令

cd /ycw/docker docker build -f DockerFile -t jshepr:1.0 . #前面测试docker已经介绍过该命令下面就不再介绍了 docker images docker run -it -p 7003:9999 --name yyy -d jshepr:1.0 #上面运行报错 用这个 不报错就不用 docker rm yyy docker ps #查看项目日志 docker …...

C++ DAY7

一、类模板 建立一个通用的类&#xff0c;其类中的类型不确定&#xff0c;用一个虚拟类型替代 template<typename T> 类template ----->表示开始创建模板 typename -->表明后面的符号是数据类型&#xff0c;typename 也可以用class代替 T ----->表示数据类型…...

Vue2 使用插件 Volar 报错:<template v-for> key should be placed on the <template> tag.

目录 问题描述 版本描述 问题定位 问题解决 VS Code 插件地址 问题描述 在 VS Code 上使用插件 Volar 开发 Vue3 项目&#xff0c;然后去改 Vue2 项目时&#xff0c;对没有放在<template v-for> 元素上的 :key&#xff0c;会提示 <template v-for> key should…...

启动线程方法 start ()和 run ()有什么区别

在Java中,线程可以通过调用start()方法或者直接调用run()方法来执行。这两种方式有着重要的区别: start() 方法:当你调用线程的start()方法时,它会使线程进入就绪状态,等待系统调度。系统会为该线程分配资源,并在合适的时机执行线程的run()方法。实际上,start()方法会启…...

Java的全排列模板

c有全排列函数&#xff0c;我们Java没有&#xff0c;所以我们只能自己手写了。 模板一&#xff1a;&#xff08;不去重&#xff09; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class liyunpeng {public static void main(Stri…...

读书笔记——《万物有灵》

前言 上一本书是《走出荒野》&#xff0c;太平洋步道女王提到了这本书《万物有灵》&#xff0c;她同样是看一点撕一点的阅读。我想&#xff0c;在她穿越山河森林&#xff0c;听见鸟鸣溪流的旅行过程中&#xff0c;是不是看这本描写动物有如何聪明的书——《万物有灵》&#xf…...

面试现场表现:展示你的编程能力和沟通技巧

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

34亿的mysql表如何优雅的扩字段长度兵并归档重建

业务背景&#xff1a; 该系统有一张表数据量已达到34亿&#xff0c;并且有个字段长度不够&#xff0c;导致很多数据无法插入。因为业务只要保留近2个月数据即可&#xff0c;所以需要接下来需要做2点&#xff1a;1&#xff0c;扩字段长度 2&#xff0c;只保留近2个月的数据。 …...

C#_进程单例模式.秒懂Mutex

什么是Mutex? 可以定义调用线程是否具有互斥性&#xff0c;程序创建者拥有控制权&#xff0c;相反只能引用程序。 参数1&#xff1a;如果是程序创建者&#xff0c;就获得控制权。 参数2&#xff1a;名称&#xff0c;可使用GUID生成。 参数3&#xff1a;out 返回值&#xf…...

AcWing 5050. 排序 (每日一题)

题目描述 给定一个长度为 n 的由小写字母构成的字符串。 请你按照 a∼z 的顺序&#xff0c;对字符串内的字符进行重新排序&#xff0c;并输出重新排序后的字符串。 输入格式 第一行包含整数 T &#xff0c;表示共有 T 组测试数据。 每组数据第一行包含整数 n 。 第二行包…...

【TypeScript】proxy 和 Reflect

proxy &#xff08;代理&#xff09; 和 Reflect &#xff08;反射&#xff09; 参数一样。 基本用法 let person { name: xx, age: 20} // proxy 支持对象&#xff0c;数组&#xff0c;函数&#xff0c;set&#xff0c;map // 代理对象的常用模式&#xff1a;前面一个对象&…...

STM32f103入门(5)定时器中断

STM32 TIM&#xff08;定时器/计数器&#xff09;模块的中断流程如下&#xff1a; 配置TIM寄存器&#xff1a;首先&#xff0c;通过配置TIM相关的寄存器来设置计时器的基本参数&#xff0c;例如预分频系数、计数模式、计数器周期等。 使能TIM中断&#xff1a;使用TIM_ITConfig函…...

Mybatis查询数据

上一篇我们介绍了在pom文件中引入mybatis依赖&#xff0c;配置了mybatis配置文件&#xff0c;通过读取配置文件创建了会话工厂&#xff0c;使用会话工厂创建会话获取连接对象读取到了数据库的基本信息。 如果您需要对上面的内容进行了解&#xff0c;可以参考Mybatis引入与使用…...

【前车之鉴】: 2023最新教程-将java程序打包到maven私服的正确打开方式,详细流程介绍不怕你掌握不了

文章目录 为什么看这篇整体流程1. 注册账号【首次需要】2. 工单申请【新项目必须】3. 项目配置【新项目必须】4. 授权认证【新项目必须】5. 一键发布 最后也很重要 为什么看这篇 一是当前网络上一些博客有遗漏部分&#xff0c;这里做补充&#xff0c;二是网上思路没错&#xff…...

如何理解IaaS、PaaS、SaaS?盘点受欢迎的八大SaaS平台!

如何理解IaaS、PaaS、SaaS&#xff1f;他们各自的优势在哪里&#xff1f;我们又应该如何选择&#xff1f;本篇将带大家深入浅出的了解IaaS、PaaS、SaaS&#xff0c;并为大家盘点2023最受欢迎的SaaS平台。 通过本文你将了解&#xff1a; IaaS、PaaS、SaaS分别是什么我们该如何理…...

立创EDA专业版的原理图上器件有一个虚线框

立创EDA专业版的原理图上器件有一个虚线框解决方法 问题分析&#xff1a; 在使用立创EDA专业版 设计电路原理图时&#xff0c;中途莫名其妙就给我的元件添加了下面图片所示的虚线外框。看着就很别扭的样子&#xff0c;而且工程大了和器件稍微布局比较密的时候就导致整体很难看…...

JUC并发编程--------基础篇

一、多线程的相关知识 栈与栈帧 我们都知道 JVM 中由堆、栈、方法区所组成&#xff0c;其中栈内存是给谁用的呢&#xff1f;其实就是线程&#xff0c;每个线程启动后&#xff0c;虚拟 机就会为其分配一块栈内存。 每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xf…...

秒懂算法2

视频链接 : 希望下次秒懂的是算法题_哔哩哔哩_bilibili P1094 [NOIP2007 普及组] 纪念品分组 原题链接 : [NOIP2007 普及组] 纪念品分组 - 洛谷 思路 : 排序 贪心 双指针首先先对输入进来的数组进行排序(由小到大)运用贪心的思想 : 前后结合,令l1,rn,若a[l]a[r]<w…...

隐秘的角落:Java连接Oracle提示Connection timed out

前言 这个报错相信各位后端开发都不陌生&#xff0c;大体的原因就那么几种&#xff1a; 检查网络连接&#xff1a;确保您的计算机与数据库服务器之间的网络连接正常。尝试通过其他方式验证您的网络连接是否正常。 检查数据库服务器状态&#xff1a;确保数据库服务器正在运行&…...

基于微信小程序的餐厅预订系统的设计与实现(论文+源码)_kaic

摘 要 随着消费升级&#xff0c;越来越多的年轻人已经开始不再看重餐饮等行业的服务&#xff0c;而是追求一种轻松自在的用餐、购物环境。因此&#xff0c;无人餐厅、无人便利店、无人超市等一些科技消费场所应势而生。餐饮企业用工荒已成为不争的事实。服务员行业的低保障、低…...

科技政策 | 四川省科学技术厅关于发布2024年第一批省级科技计划项目申报指南的通知

原创 | 文 BFT机器人 近日&#xff0c;四川省科学技术厅发布了2024年第一批省级科技计划项目申报指南&#xff1b;其中包括自然科学基金项目、重点研发计划、科技成果转移转化引导计划、科技创新基地&#xff08;平台&#xff09;和人才计划。 01 自然科学基金项目 实施周期 …...

深入了解Webpack:特性、特点和结合JS混淆加密的实例

Webpack是现代前端开发中最受欢迎的构建工具之一&#xff0c;其强大的特性和灵活性使得开发者能够更有效地管理和优化项目资源。在本文中&#xff0c;我们将深入探讨Webpack的特性和特点&#xff0c;并结合实例演示如何使用Webpack与JS混淆加密相结合。Webpack的特性和特点 1.…...

2023-08-23力扣每日一题

链接&#xff1a; 1782. 统计点对的数目 题意&#xff1a; 给n个点和m条无向边&#xff08;可重复&#xff09;&#xff0c;q个查询 定义edge[a]为一个点是a的边数量&#xff0c;定义ret[a,b]是edge[a]edge[b]-&#xff08;a与b的边&#xff09; q个查询q个答案&#xff0…...

分发饼干【贪心算法】

分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个…...

为什么网络互联地址设置为30位地址

对于点对点链路&#xff0c;为了节约IPv4地址&#xff0c;一般为其分配/30地址块&#xff0c;这样包含4个地址&#xff1a;最小地址作为网络地址&#xff0c;最大地址作为广播地址&#xff0c;剩余两个可分配地址&#xff0c;分配给链路两端的接口&#xff0c;这是最普遍的方法…...

青少年棒球锦标赛发展·棒球1号位

青少年棒球锦标赛发展 1. 青少年棒球锦标赛简介 青少年棒球锦标赛是一个令人兴奋的国际性比赛&#xff0c;每年都有来自世界各地的优秀青少年棒球选手参加。这个锦标赛旨在提供一个展示青少年棒球选手的技能和才华的平台&#xff0c;同时也是为了推动棒球在全球范围内的普及和…...

Unity实现UI图片面板滚动播放效果第二弹

效果&#xff1a; 场景结构&#xff1a; 特殊物体&#xff1a;panel下面用排列组件horizent layout group放置多个需要显示的面板&#xff0c;用mask遮罩好。 主要思路&#xff1a; 这次是要在最后一个toggle的地方&#xff0c;依然向左滚动回1&#xff0c;这是难点。因此实际…...

Redis的基本操作

文章目录 1.Redis简介2.Redis的常用数据类型3.Redis的常用命令1.字符串操作命令2.哈希操作命令3.列表操作命令4.集合操作命令5.有序集合操作命令6.通用操作命令 4.Springboot配置Redis1.导入SpringDataRedis的Maven坐标2.配置Redis的数据源3.编写配置类&#xff0c;创还能Redis…...

省级智慧农业大数据平台项目规划建设方案[195页Word]

导读&#xff1a;原文《省级智慧农业大数据平台项目规划建设方案[195页Word]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 1 农业大数据平台项目概述 1.1 建设…...

php图片批量压缩并同时保持清晰度

php图片压缩可以通过GD库来实现。以下是一个使用GD库进行图片压缩的示例代码&#xff1a; // 原始图片路径 $sourceImage path/to/source/image.jpg; // 压缩后保存的路径及文件名 $compressedImage path/to/compressed/image.jpg; // 压缩后的图片质量&#xff08;1-100&…...

243:vue+Openlayers 更改鼠标滚轮缩放地图大小,每次缩放小一点

第243个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中设置鼠标滚轮缩放地图大小,每次滑动一格滚轮,设定的值非默认值1。具体的设置方法,参考源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源…...