文件操作和IO-3 文件内容的读写
文件内容的读写——数据流
流是操作系统提供的概念,Java对操作系统的流进行了封装。
数据流就像水流,生生不息,绵延不断。
水流的特点:比如要100mL的水,可以一次接10mL,分10次接完,也可以一次接5mL,分20次接完,也可以一次接100mL水一次接完……(此处我们接的方法有无数多种,但最终得到的效果是一样的)
文件中的数据流也是类似的情况:比如要读写100字节的数据,可以一次读写10字节,分10次完成。也可以一次读写5字节,分20次完成。也可以一次读写1字节,分100次读写完。也可以一次读写100字节,1次读完……(此处对小儿的方式也是任意多的情况,最终得到的效果也是一样的)
Java标准库种对于流进行了一系列的封装,提供了一组类来负责进行这些工作。针对这些类,大概可以两个类别:
1、字节类:以字节为单位进行读写,一次最少读写一个字节。
代表类:InputStream(针对文件进行读操作) OutputStream(针对文件进行写操作)
2、字符流:以字符为单位进行读写,一次最少读取一个字符。比如:如果是utf8编码表示汉字,3个字节表示一个汉字,每次读写都得以3个字节为单位(即以一个汉字为单位)来进行读写
代表类:Reader(针对文件进行读操作) Writer(针对文件进行写操作)
读写文件在编程语言中的固定套路:1、打开文件 2、关闭文件 3、读文件 4、写文件
字节流
InputStream
方法
注意:inputStream是一个抽象类,要是有还需要具体的实现类。关于InputStream的实现类有很多,基本可以认为不同的输入类型都可以对应一个InputStream类,我们此处是从文件中读取,使用FileInputStream 。
这是InputStream类的源码,被abstract修饰表示这是一个抽象类。
有些类,我们不希望它能够创建出实例来。就使用abstract来修饰它,编译器就可以进行检查,如果想要创建实例就会编译报错。所谓面向对象,就是通过代码抽象来表示实际事物的一种方式。
抽象这个词语本身很难理解,但是这个词语又是计算机比较常见的词语。那么,我们作为程序员又应该如何理解抽象呢?可以尝试理解抽象的反义词——形象/具体。
如图,这是一只具体的小猫
具体的猫,我们就能看到更多的信息,比如:这只猫是中华田园猫,毛色是黑白相间的,眼睛是棕色的,胡须是白色的……
抽象的小猫:
只具备猫的最基本特征,但无法获得更多的信息。
信息越多,就越具体。信息越少,就越抽象。
我们程序员写代码,很多时候,就是要用抽象的方式来比较表示具体的事物。
古老的面试题:interface和abstract之间的区别
FileInputStream
构造方法
实例化FileInputStream对象的过程,也就是打开文件的过程。
代码如下:
public static void main(String[] args) throws FileNotFoundException {InputStream inputStream = new FileInputStream("./test.txt");}
注意:在创建FileInputStream对象时需要抛出一个FileNotFoundException(文件未被找到)异常!!!
我们刚才讲过,在各种编程语言中,读写文件需要打开文件、关闭文件、读文件、写文件。我们现在既然打开了文件,就要考虑关闭文件。
close方法
关闭文件需要使用close方法,这个方法同样也需要抛出一个IOException,它是上面的FileNotFoundException的父类,所以我们总的只需要抛出一个IOException。
public static void main(String[] args) throws IOException {InputStream inputStream = new FileInputStream("./test.txt");inputStream.close();}
关闭文件的操作,也可以理解是释放了文件的相关资源。
我们在计算机是如何工作那篇博客中讲过,进程是由一个PCB(进程控制块)组成的,PCB中有一个属性是文件描述符表,记录了当前进程都打开了那些文件。用顺序表/数组存储,数组中的每个元素都是一个结构体,这个结构体就具体地描述了打开的文件在文件系统上的一些属性。每次打开一个文件,都是需要在文件描述符表中占据一个位置的,如果不关闭一直打开的话,就会导致文件描述符表被耗尽(文件描述符表的长度是有上限的)。当文件描述符表被耗尽了以后,后续打开文件就会打开失败,从而导致文件资源泄露,内存泄漏。
那为什么文件描述符表不能整个像ArrayList一样的自动扩容机制呢???
这会付出很大的代价,对于操作系统内核来说对于性能的要求是很高的,内核的任务很重,所以对性能的要求会很高,如果要进行上述自动扩容操作,要十分慎重。有可能因为扩容引起了系统卡顿,就得不偿失了
而内存泄漏问题,由于Java提供了GC(垃圾回收机制),我们不太需要担心内存泄漏问题,相当于是给我们的家里请了一位保洁阿姨,每隔一段时间就会帮我们收拾屋子,丢丢垃圾啥的。
如果我们的代码像上面那么写,那么是有可能执行不到关闭文件这里的(中间执行其他逻辑时可能会有return或者抛出异常):
public static void main(String[] args) throws IOException {//打开文件InputStream inputStream = new FileInputStream("./test.txt");//其他逻辑//关闭文件inputStream.close();}
所以我们可以使用finally来确保这一步close方法一定能执行到。但又出现问题了:inputStream是在try代码块中被实例化的,是一个局部变量,在finally里面根本不认识inputStream这个变量。所以我们需要将inputStream定义在try的外面。
代码如下:
public static void main(String[] args) throws IOException {InputStream inputStream = null;//打开文件try {inputStream = new FileInputStream("./test.txt");//其他逻辑}finally {//关闭文件inputStream.close();}}
Java中还提供了另一个版本:try-with-resources。注意:只有实现了Closeable接口的类,才能使用该方法,此时try方法就会自动帮我们调用close方法释放资源了。
代码如下:
public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("./test.txt")) {}}
read方法
第一个:无参数版本,每次调用读取一个字节,返回值是读取到的这个字节的值,看起来返回值是int,实际上是byte,因为这个方法读到文件的末尾继续读会返回-1(byte的取值范围是0~255),所以看起来返回值是int。
第二个:一个参数,传入的参数是字节数组,是一个“输出型参数”。从输入流中读取一定字节并将其存储到缓冲区数组b中。(此处的byte[ ]是引用类型,方法内部针对数组内容进行修改,方法执行结束之后,方法外部也仍然生效)。
上面两组代码的打印分别是多少呢?
第一组的打印结果是0。原因:func方法外的a是实参,而在func方法中传入的a是形参,函数对形参的修改,并不会改变函数实参的值,所以打印的结果仍然为0。
第二组的结果是100。原因:方法内部是针对数组内容进行修改的,数组是引用类型,a[0] = 100是解引用操作,方法执行结束之后,方法外部也能生效。
那这个代码的结果是啥呢?
结果是“”。原因:上面代码执行的操作实际上是对引用赋值(并非是解引用操作),也就相当于方法内的形参引用s指向了一个新的对象(字符串),而方法外实参所指向的对象并没有改变。
第三个:第三个参数版本,大体和第二个版本一样,只是增添了开始和结束的位置。off-->offset
注意:read的第二个和第三个版本,返回的int就不是读取到的值了,而是实际读取到的字节的个数。默认情况下,read会尝试把数组填满,但是文件的实际剩余的长度可能并不足以被填满,所以返回值会告诉我们实际填了多少个字节。
代码示例:
首先,先准备好我们要读的文件
下面,我们将编写代码以16进制的形式打印上面的文件:
public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("./test.txt")) {while(true) {int x = inputStream.read();if(x == -1){break;}System.out.printf("%x ",x);}}}
因为是以16进制的形式打印,所以输出结果是61 62 63 64 65 66 67:
一个参数的版本:
public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("./test.txt")) {while(true) {byte[] buffer = new byte[1024];int x = inputStream.read(buffer);if(x == -1){break;}for (int i = 0; i < x; i++) {System.out.printf("%x ",buffer[i]);}}}}
打印结果:
buffer也是计算机中的常用术语,表示“缓冲器”,往往是一个内存空间。读文件是把硬盘中的数据读到内存中,上面的写法,一次能够读若干个字节,要比一次读一个字节更加高效。
操作硬盘,本身就是一个比较低效的操作,我们程序员期望的是,低效的操作,出现的次数越少越好,效率就会更高!!!
如果此时test.txt文件中的是汉字的话,我们也可以基于字节数组构成String进行打印。
先把刚才的文件内容改成汉字:
代码如下:
public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("./test.txt")) {while(true) {byte[] buffer = new byte[1024];int x = inputStream.read(buffer);if(x == -1){break;}String s = new String(buffer,0,x);System.out.println(s);}}}
注意:在 String s = new String(buffer, 0, n); 此处构造 String 是通过前 n 个字节构造,而不是整个数组,实际读取文件的内容可能不足 1024个字节。
OutputStream
方法:
OutputStream同样是一个抽象类,使用时也是需要具体实现类。
FileOutputStream
write方法:
第一个版本:一次写一个字节。
第二个版本:一次写若干个字节。
第三个版本:将若干个字节写在数组的指定部分。
代码示例:
public static void main(String[] args) throws IOException {try(OutputStream outputStream = new FileOutputStream("./test.txt")){byte[] buffer = new byte[]{97,98,99,100,101,102,103};outputStream.write(buffer);}}
运行结果:
可以看到我们刚才的“你好”被消除了,然后重新写上了abcdefg(97~103对应得ASCLL码值)。
注意:此处的OutputStream操作默认会把文件之前的内容清空掉,然后从头重新写!!!(并不是write方法引起的,而是在打开文件时就已经清除了)
如果我们想在原来写的基础上添加内容,也可以使用追加写的方式,不清空文件内容,把新的内容写到文件末尾。
只需要在创建OutptStream对象时,在后面追加一个append参数即可:
执行结果:
字符流
Reader
Reader的使用方法和InputStream差不多 ,但是此处读就是以1个字符为最小单位了。
代码如下:
public static void main(String[] args) throws IOException {try(Reader reader = new FileReader("./test.txt")){while(true) {char[] butter = new char[1024];int n = reader.read(butter);if (n == -1){break;}for (int i = 0; i < n; i++) {System.out.print(butter[i] + " ");}}}}
文件内容:
运行结果:
那此时大家可能就会有疑问,一个字符不是占2个字节吗?那如果文件里的是中文,中文按照utf8编码,每个字符是3个字节,但是此处读取来的字符这么就成2个字节了呢 ?
代码如下:
public static void main(String[] args) throws IOException {try(Reader reader = new FileReader("./test.txt")){while(true) {char[] butter = new char[1024];int n = reader.read(butter);//read时会把utf8转为unicodeif (n == -1){break;}String s = new String(butter,0,n);//基于unicode构造成StringSystem.out.println(s);}}}
上面的代码,相当于把文件中的utf8编码在按照字符读取的时候,先转成unicode,每个char里面存储的是对应的unicode的值。然后基于unicode最终再构造成utf8的String(这个过程已经被Java内部封装过了,没办法直接感受到~~)。
先把文件改成中文字符:
运行结果如下:
Writer
Writer字符流和OutputStream的使用方法差不多,只是和Reader一样以1字符为最小单位进行写操作。
代码示例:
public static void main(String[] args) throws IOException {try (Writer writer = new FileWriter("./test.txt",true)){char[] buffer = new char[]{97,98,99,100};writer.write(buffer);}}
运行结果:
总结:
补充:也可以使用Scammer来辅助我们进行读取文件,Scanner里面的System.in本质上就是一个InputStream。
代码示例:
public static void main(String[] args) throws IOException {try(InputStream inputStream = new FileInputStream("./test.txt")){Scanner scanner = new Scanner(inputStream);while(scanner.hasNext()){String s = scanner.next();System.out.println(s);}}}
运行结果:
相关文章:
文件操作和IO-3 文件内容的读写
文件内容的读写——数据流 流是操作系统提供的概念,Java对操作系统的流进行了封装。 数据流就像水流,生生不息,绵延不断。 水流的特点:比如要100mL的水,可以一次接10mL,分10次接完,也可以一次接…...
Day 0015:Metasploit 基础解析
目录 一、理论学习(Metasploit 架构与核心组件) 一、架构设计:分层与模块化 基础层(Ruby 框架): 核心层(模块引擎): 接口层(交互界面)&#…...
相机标定与图像处理涉及的核心坐标系
坐标系相互关系 #mermaid-svg-QxaMjIcgWVap0awV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QxaMjIcgWVap0awV .error-icon{fill:#552222;}#mermaid-svg-QxaMjIcgWVap0awV .error-text{fill:#552222;stroke:#552…...
单例模式的运用
单例模式实现分析 在我们的向量数据库配置类 MilvusVectorDatabaseConfig 中,采用了单例模式的实现方式,这是一种非常经典且实用的设计模式。 饿汉式单例实现 这种实现方式属于饿汉式单例模式,它的优点在于: // 在类加载时就创…...
PageHelper分页原理解析:从源码到MySQL方言实现
一、引言 分页查询是Web开发的必备功能,MyBatis生态中的PageHelper以其简单易用的特性广受欢迎。本文将从源码层面(v5.3.2)解析PageHelper的分页实现机制,结合MySQL方言展示完整的执行链路。 二、核心实现原理 1. 插件初始化 …...
MySQL中索引最左前缀法则、索引失效情况、前缀索引、索引设计原则
最左前缀法则 联合索引中,最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索引将会部分失效(后面的字段索引失效)举例假设有一个联合索引包含三个字段按顺序:…...
pdf图片导出(Visio和Origin)
一、Visio 导入pdf格式图片 1. 设计->大小,适应绘图。 2. 文件->导出,导出为pdf格式。 上面两部即可得到只包含图的部分的pdf格式。 如果出现的有默认白边,可以通过以下方式设置: 1. 文件->选项->自定义功能区->…...
NR 通讯的整体架构
前言: 并假设发射器发送了一个信号,如左下角所示(蓝色),接收器检测到的信号显示在右侧(红色)。您在图中注意到的第一件事是什么?那就是发送的信号和接收的信号并不完全相同。 有什么…...
【大模型面试每日一题】Day 26:从伦理角度,大模型可能存在哪些潜在风险?技术上如何实现内容安全控制(如RLHF、红队测试)?
【大模型面试每日一题】Day 26:从伦理角度,大模型可能存在哪些潜在风险?技术上如何实现内容安全控制(如RLHF、红队测试)? 📌 题目重现 🌟🌟 面试官:从伦理角度…...
第六届电子通讯与人工智能国际学术会议(ICECAI 2025)
在数字化浪潮中,电子通讯与人工智能的融合正悄然重塑世界的运行逻辑。技术基础的共生关系是这场变革的核心——电子通讯如同“信息高速公路”,通过5G等高速传输技术,将海量数据实时输送至AI系统,使其能够像人类神经系统般快速响应…...
深入剖析 5G 核心网中的 PLMN
一、引言 在 5G 技术迅猛发展的当下,5G 核心网作为整个通信系统的关键枢纽,支撑着海量数据传输、低延迟通信以及多样化业务应用。其中,公共陆地移动网络(Public Land Mobile Network,PLMN)扮演着极为重要的角色,它是 5G 核心网实现用户接入、网络管理以及业务提供的基础…...
佰力博科技与您探讨半导体电阻测试常用的一些方法
一、两探针法 两探针法是一种较为基础的测试方法。该方法将两根探针与半导体样品表面紧密接触,通过电源在两根探针之间施加电压,同时使用电流表测量通过样品的电流,再根据欧姆定律计算电阻。这种方法的优点在于操作简单、设备要求较低&a…...
5G 核心网中的 NPN 功能详解
引言 在 5G 技术飞速发展的今天,5G 核心网不断演进,为各类应用场景提供强大支撑。其中,NPN(Non-Public Network,非公共网络)功能作为 5G 核心网的重要特性,正逐渐崭露头角,在众多行业中发挥着关键作用。它为特定用户或组织打造专属网络环境,满足其对网络性能、安全性…...
谷歌medgemma-27b-text-it医疗大模型论文速读:多语言大型语言模型医学问答基准测试MedExpQA
《MedExpQA: 多语言大型语言模型医学问答基准测试》论文解析 一、引言 论文开篇指出大型语言模型(LLMs)在医学领域的巨大潜力,尤其是在医学问答(QA)方面。尽管LLMs在医学执照考试等场景中取得了令人瞩目的成绩&#…...
# 深入解析BERT自然语言处理框架:原理、结构与应用
深入解析BERT自然语言处理框架:原理、结构与应用 在自然语言处理(NLP)领域,BERT(Bidirectional Encoder Representations from Transformers)框架的出现无疑是一个重要的里程碑。它凭借其强大的语言表示能…...
js中encodeURIComponent函数使用场景
encodeURIComponent 是 JavaScript 中的一个内置函数,它的作用是: 将字符串编码为可以安全放入 URL 的形式。 ✅ 为什么需要它? URL 中有一些字符是有特殊意义的,比如: ? 用来开始查询参数 & 分隔多个参数 连接…...
【NLP 77、Python环境管理工具之conda】
如果你第一万次否定自己,那我希望我可以一万零一次大声称赞你 —— 25.5.22 一、什么是conda conda是一个开源的包管理系统和环境管理系统,主要用于Python语言,但也可以用于其它语言的项目 二、为什么要使用conda ① 多环境共存,多…...
替代云数据库的本地方案:MySQL+phpMyAdmin的远程管理与跨网络访问技术
文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 对于运维来说,平时还好,一旦出门…...
Dify大语言模型应用开发环境搭建:打造个性化本地LLM应用开发工作台
文章目录 前言1. Docker部署Dify2. 本地访问Dify3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 各位小伙伴们,大家好!今天我们要来一场技术大冒险,手把手教你如何在Linux Ubuntu系统上使用Docke…...
MySQL索引事务
索引 通过索引可以对查询操作进行优化,通过减少全表扫描,快速定位数据,原本的查询操作是对表进行遍历,如果是大表效率较低 1)注意事项 占用了更多的空间,由于生成索引需要依赖于数据结构和额外数据&…...
Seay代码审计工具
Seay代码审计工具 介绍 Seay代码审计工具是一款由国内安全研究人员"Seay"开发的源代码安全审计工具,主要用于帮助安全人员快速发现PHP代码中的安全漏洞,快速定位代码中的安全风险点。 主要功能特点 自动化审计功能 支持自动扫描PHP代码中的…...
【人工智障生成日记1】从零开始训练本地小语言模型
🎯 从零开始训练本地小语言模型:MiniGPT TinyStories(4090Ti) 🧭 项目背景 本项目旨在以学习为目的,从头构建一个完整的本地语言模型训练管线。目标是: ✅ 不依赖外部云计算✅ 完全本地运行…...
技术分享:大数据挖掘平台架构设计与行业应用实践
在数字化转型浪潮下,企业数据规模呈指数级增长。如何构建高效的数据挖掘体系,实现数据价值变现,成为技术团队面临的重要课题。本文将深入探讨大数据挖掘平台的核心架构、关键技术及行业应用实践。 一、平台架构设计 1. 数据采集层 支持多源异…...
线性Wi-Fi FEM被卷死,非线性FEM是未来?
在跑了一圈路由器客户之后,我的内心反而平静下来,被卷死的不只是Wi-Fi FEM赛道,还有家用路由器市场。 尽管路由器市场比较惨淡,不过客户还是很愿意接见我,并做更广泛的交流和探讨。一方面之前推Wi-Fi FEM的众多厂商在渐…...
OpenCV CUDA模块图像过滤------用于创建一个最小值盒式滤波器(Minimum Box Filter)函数createBoxMinFilter()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数创建的是一个 最小值滤波器(Minimum Filter),它对图像中每个像素邻域内的像素值取最小值。常用于&…...
【MySQL】06.MySQL表的增删查改
1. insert 我们先创建一个表结构,这部分操作我们使用这张表完成我们的操作: mysql> create table student(-> id int primary key auto_increment,-> name varchar(20) not null,-> qq varchar(20) unique-> ); Query OK, 0 rows affec…...
MySQL 索引失效及其解决办法
一、前言 在数据库优化中,索引(Index)是一项至关重要的技术手段,可以显著提升查询性能。然而,在实际开发过程中,MySQL 索引并不总是如预期生效。本文将从原理出发,系统地介绍索引失效的常见场景及其解决方案,帮助开发者有效规避性能陷阱。 二、索引基础回顾 MySQL 支…...
在线时间戳(Unix TimeStamp)转换器
做了一个在线时间戳转换器,简单、好用,提供多种日期格式。 移动端友好。 目标是做一套在线工具集,时间戳转换只是第一步。 欢迎试用...
flutter 项目调试、flutter run --debug调试模式 devtools界面说明
Flutter DevTools 网页界面说明 1. 顶部导航栏 Inspector:查看和调试 Widget 树,实时定位 UI 问题。Performance-- 性能分析面板,查看帧率、CPU 和 GPU 使用情况,识别卡顿和性能瓶颈。Memory-- 内存使用和对象分配分析ÿ…...
Qt C++实现马的遍历问题
在这个项目中,我们面对的是一个基于中国象棋的马的遍历问题,使用了C++编程语言,并结合了Qt5库来实现图形界面和棋盘的绘制。以下是这个项目涉及的关键知识点: 马的移动规则:马在象棋中具有独特的“日”字形移动方式,即每次可以向前、后、左或右移动一格,然后在同一行或同…...
web第六次课后作业--使用ApiFox实现请求响应操作
一、实体参数 1.1 简单实体参数 1.2 复杂实体对象 如果请求参数比较多,通过上述的方式一个参数一个参数的接收会比较繁琐。此时,我们可以考虑将请求参数封装到一个实体类对象中。 要想完成数据封装,需要遵守如下规则:请求参数名…...
第十周作业
一、CSRF 1、DVWA-High等级 2、使用Burp生成CSRF利用POC并实现攻击 二、SSRF:file_get_content实验,要求获取ssrf.php的源码 三、RCE 1、 ThinkPHP 2、 Weblogic 3、Shiro...
Excel合并单元格后,如何自动批量生成序号列
1.选择整列 2.组合键:CtrlG 3.定位条件,选择“空值” 4.在第一个框中输入“MAX(”,鼠标选中A1框,后加“:”,鼠标选中前方“A1”,按“F4”绝对引用,补全右括号,后输入“1…...
数据结构 -- B树和B+树
B树 B树 5叉查找树 最少1个关键字,2个分叉 最多4个关键字,5个分叉 如何保证查找效率 (1)eg.对于5叉排序树,规定除了根节点外,任意结点都至少有3个分叉,2个关键字 (若每个结点内关…...
el-table高度自适应、数据查询后高度展示错误问题
在很多场景中我们需要实现表格的高度自适应,即不同屏幕大小下需要使用不同的高度来设置表格,那么我们应该如何实现呢? 1.el-table实现高度自适应 通过以下代码可以实现表格根据屏幕进行自适应 设置表格的高度 <el-table ref"tableD…...
unittest
1.什么是unittest? unittest是Python自带的一个单元测试框架, 它可以做单元测试, 也能用于编写和运行重复的测试工作。它给自动化测试用例开发和执行提供了丰富的断言方法, 判断测试用例是否通过, 并最终生成测试结果. 2.unittest组成 2.1 TestCase TestCase即测试…...
【Linux学习笔记】ext2文件系统的深度剖析
【Linux学习笔记】ext2文件系统的深度剖析 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】ext2文件系统的深度剖析前言一.ext2文件系统1.1宏观认识 二. Block Group三. 块组内部构成3.1 超级块&am…...
Vue 3 官方 Hooks 的用法与实现原理
Vue 3 引入了 Composition API,使得生命周期钩子(hooks)在函数式风格中更清晰地表达。本篇文章将从官方 hooks 的使用、实现原理以及自定义 hooks 的结构化思路出发,全面理解 Vue 3 的 hooks 系统。 📘 1. Vue 3 官方生…...
通过现代数学语言重构《道德经》核心概念体系,形成一个兼具形式化与启发性的理论框架
以下是对《道德经》的数学转述尝试,通过现代数学语言重构其核心概念,形成一个兼具形式化与启发性的理论框架: 0. 基础公理体系 定义: 《道德经》是一个动态宇宙模型 U(D,V,Φ),其中: D 为“道”的无限维…...
openai-whisper-asr-webservice接入dify
openai-whisper-asr-webservice提供的asr的api其实并不兼容openai的api,所以在dify中是不能直接添加到语音转文字的模型中,对比了下两个api的传参情况,其实只要改动一处,就能支持: openai兼容的asr调用中formdata中音频…...
曾经在知乎上看到一个回答:“入职做FPGA,后续是否还可以转数字IC设计?”
曾经在知乎上看到一个回答:“入职做FPGA,后续是否还可以转数字IC设计?” 对比FPGA的行业薪资水平,数字IC行业中的一些基础性岗位薪资比FPGA要高一些。 除了薪资之外,更多FPGA开发者考虑转向数字IC设计的原因如下&…...
第4周_作业题_逐步构建你的深度神经网络
文章目录 ***逐步构建你的深度神经网络***0. 背景0.1 要解决的问题0.2 作业大纲0.3 构建深层神经网络步骤 1. 导入包2. 初始化参数2.1 2层神经网络2.2 L层神经网络 3. 前项传播函数3.1 前项传播步骤3.2 线性前向3.3 线性激活部分3.4 L层前项传播模型3.5 计算成本 4. 反向传播模…...
Linux 搭建FTP服务器(vsftpd)
搭建FTP服务器(vsftpd): 文章目录 搭建FTP服务器(vsftpd):配置镜像安装vsftpd配置vsftpd关闭SELinux:配置防火墙启动vsfptd服务并设置开机自启创建FTP用户测试windows中测试Linux测试下载get/mget上传put/mput删除文件delete 搭建SCP服务器(基…...
AWS中国区中API Gateway中403的AccessDeniedException问题
问题 在互联网使用API Gateway的域名访问接口,出现403问题AccessDeniedException。具体如下: 前提 这里API Gateway相关配置都没有问题。而且,vpc内网都能访问被代理的服务。这里api gateway不需要使用自定义域名。 解决 向客服发个工单…...
计量单片机 RN8302:特性、使用与应用
在现代电力监测与能源管理领域,精确的电能计量至关重要。计量单片机 RN8302 作为一款高性能的电能计量芯片,凭借其卓越的特性与功能,在众多应用场景中发挥着关键作用。本文将全面深入地介绍 RN8302 的各项特性、使用方法、注意事项以及广泛的…...
Flutter生物识别认证之Flutter指纹认证Flutter人脸认证
Flutter介绍: Flutter是谷歌开发的开源UI软件开发工具包,用于高效构建跨平台的应用程序,支持iOS、Android、Web、Windows、macOS和Linux。它使用Dart语言编写,提供了丰富的组件和工具,使开发者能够创建高质量、高性能…...
了解Android studio 初学者零基础推荐(2)
在kotlin中编写条件语句 if条件语句 fun main() {val trafficLight "gray"if (trafficLight "red") {println("Stop!")} else if (trafficLight "green") {println("go!")} else if (trafficLight "yellow")…...
【Java Web】1.Maven
📘博客主页:程序员葵安 🫶感谢大家点赞👍🏻收藏⭐评论✍🏻 文章目录 一、初始Maven 1.1 什么是Maven 1.2 Maven的作用 二、Maven概述 2.1 Maven模型 2.2 Maven仓库 2.3 创建Maven项目 2.4 POM配置…...
【Spark集成HBase】Spark读写HBase表
Spark读写HBase表 摘要一、实验环境准备1. 技术版本2. Maven 依赖配置 二、实验步骤1. 数据准备2. HBase 表结构设计3. 代码实现3.1 数据写入 HBase(writeDataToHBase 方法)3.2 数据读取与分析(readHBaseData 方法3.3 Spark SQL 分析3.4 完整…...
【Linux】借助gcc源码修改,搜索头文件当前进展
从上图可以看出对于每次的搜索,都是从第一个目录开始搜索,图里也可以看到修改源代码所在的目录,函数,行,昨天的博客感觉对于找到的位置还是不太好。 在使用修改源代码编译的GCC,进行编译内核源代码时&#…...