springboot整合redis
1.redis的数据类型,一共有5种.后面结合Jedis和redistemplate,以及单元测试junit一起验证
1)字符串
2)hash
3)列表
4)set(无序集合)
5)zset(有序集合)
2.Jedis的使用
a)引入依赖
<!--加入springboot的starter的起步依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.1.4.RELEASE</version></dependency>
<!--springboot整合redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.1.4.RELEASE</version></dependency>
<!--jedis依赖--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.1</version></dependency>
<!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency>
<!--配置springboot注解执行器用于yml文件提示--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>2.1.4.RELEASE</version></dependency>
<!--springboot整合junit--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.1.4.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId><version>2.1.4.RELEASE</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.6.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency></dependencies>
.b)配置yml和启动文件.这里需要注意一下,在使用redis数据库时,是不需要密码验证的.但是在后面配置RedisPoolFactory时,需要配置登录密码.因此,在yml这里需要设置密码,否则在test时会报错.
redis:host: 127.0.0.1password: 123456port: 6379timeout: 6poolMaxTotal: 30poolMaxIdle: 30poolMaxWait: 30
@SpringBootApplication
public class MySpringBootApplication {public static void main(String[] args){SpringApplication.run(MySpringBootApplication.class,args);}}
. 1)同时设置redis的登录密码
redis设置密码
验证登录: auth 123456
设置密码: config set requirepass 123456
.c)编写配置文件注入参数
@Data
@Component
@ConfigurationProperties(prefix = "redis")
public class RedisConfig1 {private String host;private int port;private int timeout; //秒private String password;private int poolMaxTotal; //资源池最大连接数private int poolMaxIdle; //资源池允许最大空闲连接数private int poolMaxWait; //超时时间 s
}
.d)配置RedisPoolFactory
@Service
public class RedisPoolFactory {@Autowiredprivate RedisConfig1 redisConfig1;@Beanpublic JedisPool JedisPoolFactory(){JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxTotal(redisConfig1.getPoolMaxTotal());jedisPoolConfig.setMaxIdle(redisConfig1.getPoolMaxIdle());jedisPoolConfig.setMaxWaitMillis(redisConfig1.getPoolMaxWait() * 1000);JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisConfig1.getHost(), redisConfig1.getPort(),redisConfig1.getTimeout(), redisConfig1.getPassword());return jedisPool;}}
.e)编写测试用例
. 1)配置junit测试,注入RedisPoolFactory,RedisTemplate
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MySpringBootApplication.class)
public class TestJedis {@Autowiredprivate RedisPoolFactory redisPoolFactory;@Autowiredprivate RedisTemplate redisTemplate;
}
. 2)测试字符串
@Testpublic void test1(){Jedis jedis = redisPoolFactory.JedisPoolFactory().getResource();//设置字符类型数据System.out.println("设置字符串类型数据");jedis.set("age","11");jedis.set("work","doctor");System.out.println(jedis.get("age"));System.out.println(jedis.get("work"));jedis.del("age","doctor");jedis.close();}
. 3)测试hash
@Testpublic void test1(){Jedis jedis = redisPoolFactory.JedisPoolFactory().getResource();//设置hash类型数据System.out.println("设置hash类型数据");jedis.hset("people1","age","11");jedis.hset("people1","work","teacher");jedis.hset("people1","name","李四");System.out.println(jedis.hget("people1", "age"));System.out.println(jedis.hget("people1","work"));System.out.println(jedis.hget("people1","name"));jedis.del("people1");jedis.close();}
. 4)测试列表
@Testpublic void test1(){Jedis jedis = redisPoolFactory.JedisPoolFactory().getResource();//设置列表类型数据System.out.println("设置列表类型数据");jedis.lpush("person","name","age","work");//左面弹栈List<String> person2 = jedis.lrange("person", 1, 2);for (String s : person2) {System.out.println("获取列表给定范围元素: "+s);}System.out.println("左面弹栈");System.out.println(jedis.lpop("person"));System.out.println(jedis.lpop("person"));System.out.println(jedis.lpop("person"));//获取列表长度System.out.println(jedis.llen("person"));//右面弹栈System.out.println("右面弹栈");System.out.println(jedis.rpop("person"));System.out.println(jedis.rpop("person"));System.out.println(jedis.rpop("person"));jedis.close();}
. 5)测试set
@Testpublic void test1(){Jedis jedis = redisPoolFactory.JedisPoolFactory().getResource();//设置set类型数据 只可以添加元素jedis.sadd("people2", "22", "33", "44","person");System.out.println(jedis.smembers("people2"));jedis.srem("people2","person");System.out.println(jedis.smembers("people2"));jedis.close();}
. 6)测试zset
@Testpublic void test1(){Jedis jedis = redisPoolFactory.JedisPoolFactory().getResource();//设置zset有序集合,排序set 从小到大jedis.zadd("score",92.00,"小明");jedis.zadd("score",69.00,"小兰");jedis.zadd("score",72.00,"小红");System.out.println(jedis.zrange("score",0,2));jedis.close();}
. 7)简单demo,排序学生成绩
@Testpublic void test2(){Jedis jedis = null;try {JedisPool jedisPool = redisPoolFactory.JedisPoolFactory();jedis = jedisPool.getResource();//造数据 学生成绩jedis.zadd("score",78,"小明");jedis.zadd("score",90,"小红");jedis.zadd("score",80,"小蓝");jedis.zadd("score",33,"小东");jedis.zadd("score",69,"小兰");//打印学生排序后的成绩Long scoreLength = jedis.zcard("score");Set<String> zrange = jedis.zrange("score", 0, scoreLength);for (String s : zrange) {System.out.println(s);}}finally {if(jedis != null){jedis.close();}}}
2.RedisTemplate的使用
a)编写配置类,这里没有使用yml文件,采用的序列化机制 Jackson2JsonRedisSerializer
@Configuration
public class RedisConfig extends JCacheConfigurerSupport {@Beanpublic JedisPoolConfig jedisPoolConfig() {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();//控制一个pool可分配多少个jedis实例jedisPoolConfig.setMaxTotal(500);//最大空闲数jedisPoolConfig.setMaxIdle(200);//每次释放连接的最大数目,默认是3jedisPoolConfig.setNumTestsPerEvictionRun(1024);//逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1jedisPoolConfig.setTimeBetweenEvictionRunsMillis(30000);//连接的最小空闲时间 默认1800000毫秒(30分钟)jedisPoolConfig.setMinEvictableIdleTimeMillis(-1);jedisPoolConfig.setSoftMinEvictableIdleTimeMillis(10000);//最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。jedisPoolConfig.setMaxWaitMillis(1500);jedisPoolConfig.setTestOnBorrow(true);jedisPoolConfig.setTestWhileIdle(true);jedisPoolConfig.setTestOnReturn(false);jedisPoolConfig.setJmxEnabled(true);jedisPoolConfig.setBlockWhenExhausted(false);return jedisPoolConfig;}@Beanpublic JedisConnectionFactory connectionFactory(JedisPoolConfig jedisPoolConfig) {RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();redisStandaloneConfiguration.setHostName("127.0.0.1");redisStandaloneConfiguration.setDatabase(0);redisStandaloneConfiguration.setPassword("123456");redisStandaloneConfiguration.setPort(6379);//获得默认的连接池构造器JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb =(JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)JedisClientConfiguration.builder();//指定jedisPoolConifig来修改默认的连接池构造器(真麻烦,滥用设计模式!)jpcb.poolConfig(jedisPoolConfig);//通过构造器来构造jedis客户端配置JedisClientConfiguration jedisClientConfiguration = jpcb.build();//单机配置 + 客户端配置 = jedis连接工厂return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);}@Beanpublic RedisTemplate<Object, Object> redisTemplate(JedisConnectionFactory connectionFactory) {RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);//初始化参数和初始化工作redisTemplate.afterPropertiesSet();return redisTemplate;}/*** description: 这里的入参使用了转配方式,由spring注入** @params No such property: code for class: Script1* @return*/@Beanpublic RedisTemplate<String,Object> redisTemplate1(RedisConnectionFactory redisConnectionFactory){//采用jackson2JsonRedisSerializer序列化机制Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer =new Jackson2JsonRedisSerializer<>(Object.class);ObjectMapper objectMapper = new ObjectMapper();//配置采用直接处理字段的方式序列化和反序列化objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);//对象映射器启用默认类型objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL,JsonTypeInfo.As.PROPERTY);objectJackson2JsonRedisSerializer.setObjectMapper(objectMapper);RedisTemplate<String, Object> template = new RedisTemplate<>();//配置template参数template.setConnectionFactory(redisConnectionFactory);template.setKeySerializer(objectJackson2JsonRedisSerializer);template.setValueSerializer(objectJackson2JsonRedisSerializer);template.setHashKeySerializer(objectJackson2JsonRedisSerializer);template.setHashValueSerializer(objectJackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}
}
. 1)说明:缺少pom
<!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>RELEASE</version><scope>compile</scope></dependency><!--引入jackson的依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.0</version></dependency><dependency>
.b)编写测试用例
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MySpringBootApplication.class)
@ContextConfiguration(classes = {RedisConfig.class})
public class TestRedisTemplate {@Autowiredprivate RedisTemplate redisTemplate;/*** description: 学习redistemplate** @params No such property: code for class: Script1* @return*/@Testpublic void test1(){//字符串数据类型redisTemplate.opsForValue().set("sport","football");System.out.println(redisTemplate.opsForValue().get("sport"));//hash数据类型redisTemplate.opsForHash().put("people","name","小明");redisTemplate.opsForHash().put("people","age",25);redisTemplate.opsForHash().put("people","salary",null);System.out.println(redisTemplate.opsForHash().get("people","name"));System.out.println(redisTemplate.opsForHash().get("people","age"));System.out.println(redisTemplate.opsForHash().get("people","salary"));//列表//左边堆栈redisTemplate.opsForList().leftPushAll("人生能有几时秋","大江东去浪淘尽",666,"醉酒当歌,人生几何");System.out.println(redisTemplate.opsForList().size("人生能有几时秋"));//左边弹栈System.out.println(redisTemplate.opsForList().leftPop("人生能有几时秋"));System.out.println(redisTemplate.opsForList().leftPop("人生能有几时秋"));System.out.println(redisTemplate.opsForList().leftPop("人生能有几时秋"));System.out.println(redisTemplate.opsForList().leftPop("人生能有几时秋"));System.out.println(redisTemplate.opsForList().leftPop("人生能有几时秋"));//set数据类型redisTemplate.opsForSet().add("person","小兰","小明","承瑞","兆雪");redisTemplate.opsForSet().difference("person","星辰大海");redisTemplate.opsForSet().difference("person","万古长灯");redisTemplate.opsForSet().difference("person",666);Set person = redisTemplate.opsForSet().members("person");for (Object o : person) {System.out.println(o);}//zset数据类型 这里的数据是doubleredisTemplate.opsForZSet().add("student","小张",89);redisTemplate.opsForZSet().add("student","小兰",99);redisTemplate.opsForZSet().add("student","小红",79);redisTemplate.opsForZSet().add("student","小明",69);Long num = redisTemplate.opsForZSet().count("student", 90, 100);System.out.println(num);Long numTotal = redisTemplate.opsForZSet().size("student");Set studentRank = redisTemplate.opsForZSet().range("student", 0, numTotal - 1);for (Object o : studentRank) {redisTemplate.opsForList().leftPushAll("studentList",o);}long students = redisTemplate.opsForList().size("studentList");for (long i = 0; i < students; i++) {System.out.println(String.format("第%s名: "+redisTemplate.opsForList().leftPop("studentList"),i+1));}}}
4.使用Jedis和RedisTemplate
a)RedisTemplate的配置比Jedis的配置类似,但是RedisTemplate使用更方便,它可以自动归还redis连接,同时封装的方法也要比Jedis多
相关文章:
springboot整合redis
1.redis的数据类型,一共有5种.后面结合Jedis和redistemplate,以及单元测试junit一起验证 1)字符串 2)hash 3)列表 4)set(无序集合) 5)zset(有序集合) 2.Jedis的使用 a)引入依赖 <!--加入springboot的starter的起步依赖--><dependency><groupId>…...
【Java】Spring Boot下的MVC
文章目录Spring MVC程序开发1. 什么是Spring MVC?1.1 MVC定义1.2 MVC 和 Spring MVC 的关系2. 为什么学习Spring MVC?3. 怎么学习Spring MVC?3.1 Spring MVC的创建和连接3.1.1 创建Spring MVC项目3.1.2 RequestMapping 注解介绍3.1.3 Request…...
【项目精选】 塞北村镇旅游网站设计(视频+论文+源码)
点击下载源码 摘要 城市旅游产业的日新月异影响着村镇旅游产业的发展变化。网络、电子科技的迅猛前进同样牵动着旅游产业的快速成长。随着人们消费理念的不断发展变化,越来越多的人开始注意精神文明的追求,而不仅仅只是在意物质消费的提高。塞北村镇旅游…...
十、Spring IoC注解式开发
1 声明Bean的注解 负责声明Bean的注解,常见的包括四个: ComponentControllerServiceRepository Controller、Service、Repository这三个注解都是Component注解的别名。 也就是说:这四个注解的功能都一样。用哪个都可以。 只是为了增强程序…...
Linux系统GPIO应用编程
目录应用层如何操控GPIOGPIO 应用编程之输出GPIO 应用编程之输入GPIO 应用编程之中断在开发板上测试GPIO 输出测试GPIO 输入测试GPIO 中断测试本章介绍应用层如何控制GPIO,譬如控制GPIO 输出高电平、或输出低电平。应用层如何操控GPIO 与LED 设备一样,G…...
手敲Mybatis-反射工具天花板
历时漫长的岁月,终于鼓起勇气继续研究Mybatis的反射工具类们,简直就是把反射玩出花,但是理解起来还是很有难度的,涉及的内容代码也颇多,所以花费时间也比较浩大,不过当了解套路每个类的功能也好,…...
Java -数据结构,【优先级队列 / 堆】
一、二叉树的顺序存储 在前面我们已经讲了二叉树的链式存储,就是一棵树的左孩子和右孩子 而现在讲的是:顺序存储一棵二叉树。 1.1、存储方式 使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。 一般只适合表示完全二叉树&a…...
Python+Qt指纹录入识别考勤系统
PythonQt指纹录入识别考勤系统如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!前言这篇博客针对<<PythonQt指纹录入识别考勤系统>>编写代码,代码整洁,规则,易读。 学…...
K_A14_004 基于STM32等单片机驱动旋转角度传感器模块 串口与OLED0.96双显示
K_A14_004 基于STM32等单片机驱动旋转角度传感器模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC旋转角度传感器模块1.2、STM32F103C8T6旋转角度传感器模块五、…...
2023年全国最新机动车签字授权人精选真题及答案12
百分百题库提供机动车签字授权人考试试题、机动车签字授权人考试预测题、机动车签字授权人考试真题、机动车签字授权人证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 11.注册登记前所有机动车都应进行安全技术检验。 答案…...
Linux小黑板(10):信号
我们写在linux系统环境下写一个程序,唔,"它的功能是每隔1s向屏幕打印hello world。"这时,我们在键盘上按出"Ctrl C"后,进程会发生什么??我们清晰地看到,进程已经在我们按出"Ctrl…...
GO 语言基础语法一 (快速入门 Go 语言)
Go语言基础语法一. golang 标识符,关键字,命名规则二. golang 变量三. golang 常量四. golang 数据类型五. golang 布尔类型六. golang 数字类型七. golang 字符串1. go语言字符串字面量2. go语言字符串连接(1). 使用加号(2). 使用 fmt.Sprintf() 函数(3…...
Java高效率复习-SpringMVC[SpringMVC-2]
SpringMVC获取请求参数 SpringMVC获取请求参数的两种方式↓ 通过ServletAPI获取请求参数 将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象 通过request的API——getParameter(String s)方法来获取…...
【前端】一个更底层库-React基础知识点
目录Reat是什么?为什么要使用React类库比较容易学习,API非常少。组件内聚,容易组合原生组件和自定义组件融合渲染状态/属性驱动全局更新commonjs生态圈/工具栏完善React基础知识JSX概述JSX嵌入变量Event事件组合组合CHILDREN总结大家好&#…...
C++ 之枚举类型
文章目录参考描述枚举类型枚举类型枚举变量的声明及定义细节枚举常量的默认初始值枚举常量不可被修改赋值运算枚举常量与数据类型为枚举常量指定数据类型可选择的数据类型特殊的 Bool强枚举类型命名冲突强枚举类型参考 项目描述菜鸟教程C 枚举类型详解精通C (第九版…...
软件测试用例(3)
按照测试对象划分: 一)界面测试: 1)软件只是一种工具,软件和人的信息交流是通过界面来进行的,界面是软件和用户交流的最直接的一层,界面的设计决定了用户对于我们设计软件的第一映像,界面如同人的面孔,具有最吸引用户的…...
Spring——Bean管理-注解方式进行属性注入
Spring针对Bean管理中创建对象提供的注解有哪些?Component:普通Service:业务逻辑层Controller:controller层Repository:dao层用注解的方式是为什么?简化xml方式开发,只需要注解就可以完成在配置…...
【设计模式之美 设计原则与思想:设计原则】20 | 理论六:我为何说KISS、YAGNI原则看似简单,却经常被用错?
上几节课中,我们学习了经典的 SOLID 原则。今天,我们讲两个设计原则:KISS 原则和 YAGNI 原则。其中,KISS 原则比较经典,耳熟能详,但 YAGNI 你可能没怎么听过,不过它理解起来也不难。 理解这两个…...
Java代码弱点与修复之——Copy-paste error(复制粘贴错误)
弱点描述 Copy-paste error,复制粘贴错误。 是指在复制和粘贴代码时产生的错误。这种错误通常是由于程序员在复制代码时未正确编辑所复制的代码或编辑复制后的代码时忘记更改一些值或参数而导致的。复制粘贴错误可能会导致程序逻辑错误、编译错误或运行时错误。 示例代码 …...
Editor.md 的使用方法及图片处理
目录1. 资源下载2. 生成页面2.1 编辑和预览页面2.2 文本渲染页面3. 图片上传3.1 前端配置3.2 后端接口4. 图片粘贴[^2]1. 资源下载 官网下载 gitee 下载 2. 生成页面 2.1 编辑和预览页面 将资源(精简后 Editor.md 资源1)导入项目: 按照官…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
