十五、类加载器、反射

news2024/11/14 15:15:42

类加载器

1类加载器【理解】

  • 作用

    负责将.class文件(存储的物理文件)加载在到内存中

在这里插入图片描述

2类加载的过程【理解】

  • 类加载时机

    • 创建类的实例(对象)
    • 调用类的类方法
    • 访问类或者接口的类变量,或者为该类变量赋值
    • 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
    • 初始化某个类的子类
    • 直接使用java.exe命令来运行某个主类
  • 类加载过程

    1. 加载

      • 通过包名 + 类名,获取这个类,准备用流进行传输
      • 在这个类加载到内存中
      • 加载完毕创建一个class对象
        在这里插入图片描述
    2. 链接

      • 验证

        确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全

        (文件中的信息是否符合虚拟机规范有没有安全隐患)

在这里插入图片描述

 - 准备

   负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始化值

   (初始化静态变量)

在这里插入图片描述

 - 解析

   将类的二进制数据流中的符号引用替换为直接引用

   (本类中如果用到了其他类,此时就需要找到对应的类)

在这里插入图片描述

  1. 初始化

    根据程序员通过程序制定的主观计划去初始化类变量和其他资源

    (静态变量赋值以及初始化其他资源)

![在这里插入图片描述](https://img-blog.csdnimg.cn/71ed760f40ab447da011ff4fa65b6189.png)
  • 小结

    • 当一个类被使用的时候,才会加载到内存
    • 类加载的过程: 加载、验证、准备、解析、初始化

3类加载的分类【理解】

  • 分类

    • Bootstrap class loader:虚拟机的内置类加载器,通常表示为null ,并且没有父null
    • Platform class loader:平台类加载器,负责加载JDK中一些特殊的模块
    • System class loader:系统类加载器,负责加载用户类路径上所指定的类库
  • 类加载器的继承关系

    • System的父加载器为Platform
    • Platform的父加载器为Bootstrap
  • 代码演示

    public class ClassLoaderDemo1 {
        public static void main(String[] args) {
            //获取系统类加载器
            ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
    
            //获取系统类加载器的父加载器 --- 平台类加载器
            ClassLoader classLoader1 = systemClassLoader.getParent();
    
            //获取平台类加载器的父加载器 --- 启动类加载器
            ClassLoader classLoader2 = classLoader1.getParent();
    
            System.out.println("系统类加载器" + systemClassLoader);/
            System.out.println("平台类加载器" + classLoader1); //
            System.out.println("启动类加载器" + classLoader2); //null
    
        }
    }
    

4双亲委派模型【理解】

  • 介绍

    如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式

在这里插入图片描述

5ClassLoader 中的两个方法【应用】

  • 方法介绍

    方法名说明
    public static ClassLoader getSystemClassLoader()获取系统类加载器
    public InputStream getResourceAsStream(String name)加载某一个资源文件
  • 示例代码

    public class ClassLoaderDemo2 {
        public static void main(String[] args) throws IOException {
            //static ClassLoader getSystemClassLoader() 获取系统类加载器
            //InputStream getResourceAsStream(String name)  加载某一个资源文件
            //获取系统类加载器
            ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
    
            //利用加载器去加载一个指定的文件
            //参数:文件的路径(放在src的根目录下,默认去那里加载)
            //返回值:字节流。
            InputStream is = systemClassLoader.getResourceAsStream("prop.properties");
    
            Properties prop = new Properties();
            prop.load(is);
    
            System.out.println(prop);
    
            is.close();
        }
    }
    

反射(重点)

反射的概述【理解】

  • 反射机制

    是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
    对于任意一个对象,都能够调用它的任意属性和方法;
    这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

获取Class类对象的三种方式【应用】

  • 三种方式分类

    • 类名.class属性

    • 对象名.getClass()方法

    • Class.forName(全类名)方法
      在这里插入图片描述

  • 示例代码

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void study(){
        System.out.println("学生在学习");
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class ReflectDemo1 {
    public static void main(String[] args) throws ClassNotFoundException {
        //1forName 参数为全类名
        Class c1 = Class.forName("com.heima.test1.Student");
        System.out.println(c1);

        //2通过类加载器获取  参数为全类名
        Class c2 = ClassLoader.getSystemClassLoader().loadClass("com.heima.test1.Student");

        //3直接类名.class
        Class c3 = Student.class;
        System.out.println(c3);

        //4对象.getClass();
        Class c4 = new Student().getClass();
        System.out.println(c4);
         System.out.println(c1 == c2);
      System.out.println(c3 == c2);
      System.out.println(c3 == c4);
  }
}

1构造方法(Constructor) 2成员变量(Field) 3普通的方法(Method)

反射获取构造方法并使用【应用】

Class类获取构造方法对象的方法

  • 方法介绍

    方法名说明
    Constructor<?>[] getConstructors()返回所有公共构造方法对象的数组
    Constructor<?>[] getDeclaredConstructors()返回所有构造方法对象的数组
    Constructor getConstructor(Class<?>… parameterTypes)返回单个公共构造方法对象
    Constructor getDeclaredConstructor(Class<?>… parameterTypes)返回单个构造方法对象
  • 示例代码

package com.heima.test3;

import java.lang.reflect.Constructor;

public class Demo01 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
        Class<?> clz = Class.forName("com.heima.test3.Student");


        //method01(clz);
        //method02(clz);


        //method03(clz);

        method04(clz);

    }

    //获取单个的私有或者公有的构造 根据参数获取
    private static void method04(Class<?> clz) throws NoSuchMethodException {
        //private com.heima.test3.Student(java.lang.String)
        Constructor<?> c1 = clz.getDeclaredConstructor(String.class);
        //public com.heima.test3.Student(java.lang.String,int)
        System.out.println(c1);
    }

    //获取单个的公有的构造 根据参数获取
    private static void method03(Class<?> clz) throws NoSuchMethodException {
        //获取单个的公有的构造 根据参数获取
        Constructor<?> c = clz.getConstructor(String.class, int.class);
        //public com.heima.test3.Student(java.lang.String,int)
        System.out.println(c);
    }

    //获取所有的(包括私有的)构造方法
    private static void method02(Class<?> clz) {
        //private com.heima.test3.Student(java.lang.String)
        //public com.heima.test3.Student()
        //public com.heima.test3.Student(java.lang.String,int)
        Constructor<?>[] declaredC = clz.getDeclaredConstructors();
        for (Constructor<?> c : declaredC) {
            System.out.println(c);
        }
    }

    //获取所有公共构造方法
    private static void method01(Class<?> clz) {
        //获取所有公共构造方法
        Constructor<?>[] constructors = clz.getConstructors();
        //public com.heima.test3.Student()
        //public com.heima.test3.Student(java.lang.String,int)
        for (Constructor<?> c : constructors) {
            System.out.println(c);
        }
    }
}

关于基本数据类型的class,比如int.class(了解)

int.class对应的Class对象是JVM合成出来的,并不是从Class文件加载出来的。注意:int.class跟Integer.class所指向的不是同一个Class对象。
int.class double.class  float.class void.class
JVM的实现中,在JVM初始化的时候就会把原始类型和void对应的Class对象创建出来。这些Class对象的创建不依赖任何外部信息(例如说需要从Class文件加载的信息),不需要经历类加载过程,而纯粹是JVM的实现细节。

Java的int类型是原始类型,是值类型而不是引用类型(或者说“对象”)。使用它并不会触发任何类加载动作 ,不会调用任何构造器。它就是个简单的值,直接存储在局部变量/字段中。

Constructor类用于创建对象的方法

  • 方法介绍

    方法名说明
    T newInstance(Object…initargs)根据指定的构造方法创建对象
    setAccessible(boolean flag)设置为true,表示取消访问检查

代码

    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class c1 = Class.forName("com.heima.test3.Student");

        //获取公有的指定参数的构造方法
        Constructor constructor1 = c1.getConstructor();
        System.out.println(constructor1);
        //用构造方法的newInstance 来创建对象
        Student s1 = (Student) constructor1.newInstance();
        System.out.println(s1);

        System.out.println("--------------------------------------------");
        //获取公有的指定参数的构造方法 参数类型 是String和int
        Constructor constructor2 = c1.getConstructor(String.class, int.class);
        System.out.println(constructor2);
        //用构造方法的newInstance 来创建对象,传入参数"张三", 18
        Student s2 = (Student) constructor2.newInstance("张三", 18);
        System.out.println(s2);


        //获取私有的指定的构造方法  参数类型是String
        System.out.println("--------------------------------------------");
        Constructor constructor3 = c1.getDeclaredConstructor(String.class);
        System.out.println(constructor3);
        //设置私有构造为可以访问的  暴力反射
        constructor3.setAccessible(true);
        //用构造方法的newInstance 来创建对象,传入参数 lisi
        Student s3 = (Student) constructor3.newInstance("lisi");
        System.out.println(s3);

        System.out.println("--------------直接用类newInstance 被淘汰的方式-----------------------");
        Student s4 = (Student) c1.newInstance();//直接用类对象.newInstance 被淘汰的方式
        System.out.println(s4);
    }

小结

  • 获取class对象

    三种方式: Class.forName(“全类名”), 类名.class, 对象名.getClass()

  • 获取里面的构造方法对象

    getConstructor (Class<?>... parameterTypes) getDeclaredConstructor (Class<?>… parameterTypes)

  • 如果是public的,直接创建对象

    newInstance(Object… initargs)

  • 如果是非public的,需要临时取消检查,然后再创建对象

    setAccessible(boolean) 暴力反射

反射获取成员变量并使用【应用】

Class类获取成员变量对象的方法

  • 方法分类

    方法名说明
    Field[] getFields()返回所有公共成员变量对象的数组
    Field[] getDeclaredFields()返回所有成员变量对象的数组
    Field getField(String name)返回单个公共成员变量对象
    Field getDeclaredField(String name)返回单个成员变量对象

Student代码

public class Student {

    public String name;

    public int age;

    public String gender;

    private int money = 300;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", money=" + money +
                '}';
    }
}

测试代码

Class c1 = Class.forName("com.heima.test4.Student");

//返回所有公共成员变量对象的数组
Field[] fs1 = c1.getFields();
for (Field f : fs1) {
    System.out.println(f);
}
System.out.println("-----------------------------------");
//返回所有成员变量(包含公共的和私有的)对象的数组
Field[] fs2 = c1.getDeclaredFields();
for (Field f : fs2) {
    System.out.println(f);
}

//获取公共的 指定的变量名字的的对象
Field fieldName = c1.getField("name");
System.out.println(fieldName);

//获取公共的 指定的变量名字的的对象
Field fieldage = c1.getField("age");
System.out.println(fieldage);

//获取公共的 指定的变量名字的的对象
Field fieldgender = c1.getField("gender");
System.out.println(fieldgender);


//获取私有的 指定的变量名字的对象
Field fieldmoney = c1.getDeclaredField("money");
System.out.println(fieldmoney);

Field类用于给成员变量赋值的方法

  • 方法介绍

    方法名说明
    void set(Object obj, Object value)赋值
    Object get(Object obj)获取值

代码

  • 私有的依然要 调用setAccessible(true) 才可以设置和获取
package com.heima.test4;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

public class Demo02 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        //获取Student的类对象
        Class<?> clz = Class.forName("com.heima.test4.Student");

        //获取构造方法
        Constructor<?> constructor = clz.getConstructor();

        //创建一个学生对象
        Object o = constructor.newInstance();


        //获取name属性的Field对象
        Field fName = clz.getField("name");

        //获取money属性的Field对象
        Field fMoney = clz.getDeclaredField("money");


        //给name赋值  参1是要赋值的对象 参2是具体的值
        fName.set(o, "zs");
        System.out.println(o);

        //给money赋值
        fMoney.setAccessible(true);//设置私有变量可以访问
        fMoney.set(o, 200);//给money赋值
        System.out.println(o);

        //获取值
        System.out.println(fName.get(o));
        System.out.println(fMoney.get(o));

    }
}

反射获取成员方法并使用【应用】

Class类获取成员方法对象的方法

  • 方法分类

    方法名说明
    Method[] getMethods()返回所有公共成员方法对象的数组,包括继承的
    Method[] getDeclaredMethods()返回所有成员方法对象的数组,不包括继承的
    Method getMethod(String name, Class<?>… parameterTypes)返回单个公共成员方法对象
    Method getDeclaredMethod(String name, Class<?>… parameterTypes)返回单个成员方法对象
  • 示例代码

public class Student {

    //私有的,无参无返回值
    private void show() {
        System.out.println("私有的show方法,无参无返回值");
    }

    //公共的,无参无返回值
    public void function1() {
        System.out.println("function1方法,无参无返回值");
    }

    //公共的,有参无返回值
    public void function2(String name) {
        System.out.println("function2方法,有参无返回值,参数为" + name);
    }

    //公共的,无参有返回值
    public String function3() {
        System.out.println("function3方法,无参有返回值");
        return "aaa";
    }

    //公共的,有参有返回值
    public String function4(String name) {
        System.out.println("function4方法,有参有返回值,参数为" + name);
        return "aaa";
    }
}
public class ReflectDemo1 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
        //method1();
        //method2();
        //method3();
        //method4();
        //method5();
    }

    private static void method1() throws ClassNotFoundException {
        //        Method[] getMethods():返回所有公共成员方法对象的数组,包括继承的
        //1.获取class对象
        Class clazz = Class.forName("com.heima.test5.Student");
        //2.获取成员方法对象
        Method[] methods = clazz.getMethods();
        //3.遍历
        for (Method method : methods) {
            System.out.println(method);
        }
    }

    private static void method2() throws ClassNotFoundException {
        //        Method[] getDeclaredMethods():
//                                返回所有成员方法对象的数组,不包括继承的
        //1.获取class对象
        Class clazz = Class.forName("com.heima.test5.Student");

        //2.获取Method对象
        Method[] methods = clazz.getDeclaredMethods();
        //3.遍历一下数组
        for (Method method : methods) {
            System.out.println(method);
        }
    }

    private static void method3() throws ClassNotFoundException, NoSuchMethodException {
        //        Method getMethod(String name, Class<?>... parameterTypes) :
//                                返回单个公共成员方法对象
        //1.获取class对象
        Class clazz = Class.forName("com.heima.test5.Student");
        //2.获取成员方法function1
        Method method1 = clazz.getMethod("function1");
        //3.打印一下
        System.out.println(method1);
    }

    private static void method4() throws ClassNotFoundException, NoSuchMethodException {
        //1.获取class对象
        Class clazz = Class.forName("com.heima.test5.Student");
        //2.获取一个有形参的方法function2
        Method method = clazz.getMethod("function2", String.class);
        //3.打印一下
        System.out.println(method);
    }

    private static void method5() throws ClassNotFoundException, NoSuchMethodException {
        //        Method getDeclaredMethod(String name, Class<?>... parameterTypes):
//                                返回单个成员方法对象
        //1.获取class对象
        Class clazz = Class.forName("com.heima.test5.Student");
        //2.获取一个成员方法show
        Method method = clazz.getDeclaredMethod("show");
        //3.打印一下
        System.out.println(method);
    }
}

Method类用于执行方法的方法

  • 方法介绍

    方法名说明
    Object invoke(Object obj, Object… args)运行方法

    参数一: 用obj对象调用该方法

    参数二: 调用方法的传递的参数(如果没有就不写)

    返回值: 方法的返回值(如果没有就不写)

代码

  • method3 是公共无参的
  • method4是公共有参的
  • method5是私有无参的,注意方法内,依然需要setAccessible(true);,取消私有方法的检查
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
    
    Class<?> clz = Class.forName("com.heima.test5.Student");

    //创建一个实例对象
    Object o = clz.getConstructor().newInstance();

    Method mFunc1 = clz.getMethod("function1");
    Method mFunc2 = clz.getMethod("function2", String.class);
    Method mFunc3 = clz.getMethod("function3");
    Method mFunc4 = clz.getMethod("function4", String.class);

    Method mShow = clz.getDeclaredMethod("show");

    //无参无返回值方法调用
    mFunc1.invoke(o);
    //有参无返回值方法调用
    mFunc2.invoke(o, "aaa");
    //无参有返回值方法调用
    System.out.println(mFunc3.invoke(o));
    //有参有返回值方法调用
    System.out.println(mFunc4.invoke(o, "zzzz"));


    //mShow设置为私有可以访问
    mShow.setAccessible(true);
    //调用方法show
    mShow.invoke(o);
}

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

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

相关文章

excel制表基础:规范的制表理念和思路让效率提升 下篇

在日常工作中我们会构建很多的表格&#xff0c;其实这些表格无论多少&#xff0c;都可以归结为三大类&#xff0c;分别为“源数据表”、“关系信息表”和“统计分析表”。上次我们提到了一套表格“统计的核心”——“源数据表”&#xff0c;今天继续为大家分享“关系信息表”和…

力扣(LeetCode)1802. 有界数组中指定下标处的最大值(C++)

贪心二分查找 贪心性质&#xff1a;对于数组中确定位置index的数&#xff0c;要使nums[index]最大&#xff0c;等于使得整个数组之和最小。 提示 &#xff1a;数组相邻元素之差的绝对值小于1&#xff0c;为了数组之和最小&#xff0c;从index往左&#xff0c;形成公差为1的递减…

python实现多张多格式图片转PDF并打包成exe

目录 主要思路 转PDF初始代码 转PDF最终代码 GUI界面设计代码 打包成可执行文件 完整代码 附录 主要思路 从文件夹中读取图片数据&#xff0c;然后将他们保存为PDF格式。 转PDF初始代码 不长&#xff0c;大概10行代码。 from PIL import Image from os import *def …

Stardust 案例:制作散景光斑

本文介绍使用 Ae 插件 Stardust 制作散景光斑的一般方法与步骤。效果视频1、新建合成。持续时间&#xff1a;10 秒。2、新建纯色图层&#xff0c;命名为“散景光斑”&#xff0c;然后添加 Stardust 效果。3、设置 Emitter&#xff08;发射器&#xff09; 。用一个长方形的发射器…

2023外贸人出国抢单攻略(附带2023年全球重要展会)

自11月底以来&#xff0c;全国陆续传来政府带团出国抢单的消息&#xff0c;让沉寂了3年之久的外贸行业热情高涨。这不仅预示着3年抗疫斗争的胜利&#xff0c;更意味着中国三驾马车之一的外贸行业开启了高速运转的车轮。“浙江带领万家企业去欧洲抢单&#xff01;”“福建省商务…

少儿Python每日一题(10):手机键盘

原题解答 本次的题目如下所示(原题出处:NOC) 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下。例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x。0 键按一下会出一个空格。 你的任务是读取若干句只包含英文小写字母和空格的句子,求出要…

装备制造业ERP软件如何帮助企业做好物料齐套管理?

在生产制造过程中&#xff0c;要想提高生产效率&#xff0c;齐套管理是很重要的一环&#xff0c;会直接影响库存、交付和效率。而装备制造行业原料种类特别多&#xff0c;通用件也非常多&#xff0c;齐套检查工作十分复杂&#xff0c;深受以下问题困扰&#xff1a;1.装备制造业…

springmvc源码之HandlerMapping处理器映射器

系列文章目录 springmvc源码之Web上下文初始化 springmvc源码之DispatcherServlet前端控制器 springmvc源码之HandlerMapping处理器映射器 文章目录系列文章目录HandlerMapping处理器映射器实现类配置mvc:annotation-driven配置的作用RequestMappingHandlerMapping源码创建访问…

JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台,基于Spring Boot 2.7

SpringBlade微服务开发平台 完整代码下载地址:JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台 采用前后端分离的模式&#xff0c;前端开源两个框架&#xff1a;Sword (基于 React、Ant Design)、Saber (基于 Vue、Element-UI)后端采用SpringCloud全家桶&…

【谷粒商城基础篇】前端开发基础知识

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…

Unity-ROS2与URDF导入(三)

0. 简介 在我们上一章讲的对于Unity与ROS之间的通信&#xff0c;Toolbox等比较基础的指令。下面我们将结合代码来介绍一下如何导入URDF文件&#xff0c;并通过键盘完成Unity的控制。 1. URDF模型创建 首先先创建并编辑URDF文件&#xff0c;并命名为toio_style.urdf <?x…

Python(九)Tornado web 框架

一、简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像web.py 或者 Google 的 webapp&#xff0c;不过为了能有效利用非阻塞式服务器环境&#xff0c;这个 Web 框架还包含了一些相关有用工具及优化。 Tornado 和…

LeetCode:13. 罗马数字转整数

13. 罗马数字转整数1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果1&#xff09;题目 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V …

【自学Java】Java switch语句

Java switch语句 Java switch语句教程 在 Java 语言 中如果遇到多选一的场景&#xff0c;可以使用 switch 将其简化&#xff0c;让程序更加简洁易懂。switch 语句可以被 if…else 代替。它里面包含 switch、case、default 和 break 关键字。 switch 中存放的是对应的被比较的…

题402.数位dp-acwing-1082. 数字游戏1083. Windy数1085. 不要62

文章目录题402.数位dp-acwing-1082. 数字游戏一、题目二、题解三、类似题目四、关于数位dp题402.数位dp-acwing-1082. 数字游戏 一、题目 二、题解 欲求区间[X,Y]中满足性质的数的个数&#xff0c;我们可以想着去求小于m的数中满足性质的个数f(m)&#xff0c;然后利用前缀和思…

WebDAV之葫芦儿·派盘+FX播放器

FX播放器 支持WebDAV方式连接葫芦儿派盘。 想要把手机、PC、NAS等设备上的视频在智能电视上大屏播放,支持超多格式的多合一视频播放器?快来试试FX播放器吧。 FX播放器除了存储在智能手机上的视频外,您网络上的视频也是实时无缝的࿰

关于TCP通信的学习和应用案例

记录学习TCP通信的过程&#xff0c;包括理论知识、在Qt中建立TCP服务端和客户端&#xff0c;并附上源代码。由于最近的项目中也使用到了海康VisionMaster软件&#xff0c;可以将其作为服务端&#xff0c;用Qt写的TCP客户端和其进行通信测试&#xff0c;方便调试。 目录1.关于TC…

MATLAB APP 设计实践(一)UART通信(上篇)

引言UART通信属于异步串行通信&#xff0c;通信速率比较低&#xff0c;在一些速度要求不高的场合常用来作为多设备之间的控制与被控制方式。例如以UART串口通信作为上位机侧与运行设备之间的通信形式&#xff0c;实现上位机对设备的操控以及检测设备运行状态等。那么谈到了上位…

PyTorch实战1

传送门&#xff1a;蓝桥云课实验 目录1. 实验环境2. 实验目的3. 相关原理4. 实验步骤4.1 数据预处理4.1.1 对于类型变量的处理4.1.2 对于数值类型变量进行标准化4.1.3 数据集分割4.2 创建模型手写用Tensor运算的人工神经网络4.3 训练模型4.3.1 数据的分批次处理4.4 测试模型1. …

逆向-还原代码之eth (Arm 64)

// 源程序 #include <stdio.h> #define HIETH_SYSREG_BASE (0x101e0000) #define REG_RESET 0x01C // 外设控制寄存器(IP软复位控制) #define RESET_SHIFT 12 static void hieth_set_regbit(unsigned long addr, int bit, int shift) { unsigned long …