IO模型与NIO基础
File类
File类主要是JAVA为文件这块的操作(如删除、新建等)而设计的相关类File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较
创建一个文件/文件夹
删除文件/文件夹
获取文件/文件夹
判断文件/文件夹是否存在
对文件夹进行遍历
获取文件的大小
File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法
重点:记住这第三个单词
file——文件
directory——文件夹/目录
path——路径
绝对路径————是一个完整的路径
以盘符( 比如C:)开始的路径
c:\a.txt
c:\demo\b.txt相对路径————是一个简化的路径
相对指的是相对于当前项目的根目录
如果使用当前项目的根目录,路径可以简化书写
D:\java\Java语言高级\File类\File类\File类的概述.avi–>简化为——File类的概述.avi(可以省略项目的根目录)注意
路径是不区分大小写
路径中的文件名称分隔符widows使用反斜杠,反斜杠是转义字符,`两个反斜杠代表一个普通反斜杠。
File类的静态属性
static String pathSeparator——与系统有关的路径分隔符,为了方便,它被表示为一个字符串。
static char pathSeparatorChar——与系统有关的路径分隔符。
windows下是分号,Linux下是冒号
static String Separator——与系统有关的默认名称分隔符,它被表示为一个字符串。
static char SeparatorChar——与系统有关的默认名称分隔符。
windows下是 \,Linux下是 /
public class filetest {public static void main(String[] args) {System.out.println(File.pathSeparator); //系统路径分隔符,win是分号,liunx是冒号System.out.println(File.separator);}
}
File类的构造方法
File(String pathname)
——通过将给定路径名字符串转换为抽象路径名来创建一个新的File实例。
参数
String pathname————字符串的路径名称
路径可以是以文件结尾,也可以是以文件夹结尾(win中文件有扩展名就是文件平)。
路径可以是相对路径(以项目根目录),也可以是绝对路径。
路径可以是存在的,也可以是不存在的。
创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况。
public class filetest {public static void main(String[] args) throws IOException {File file = new File("xiong.txt");file.createNewFile(); //只是文件名的话,文件创建放在项目的根目录下。File file2 = new File("xiong");file2.createNewFile();file2.mkdir();}
}
File(String parent, String child)
——根据parent路径名字符串和child路径名字符串来创建一个新的File实例。
参数————————把路径分成了两部分
String parent————父路径,该路径中的文件夹是已存的,不存在会报错
String child—————子路径
好处
父路径和子路径可以单独书写,使用起来非常灵活;父路径和子路径都可以变化。
public class filetest {public static void main(String[] args) throws IOException {File file = new File("C:\\abc\\","ccc.txt");file.createNewFile();System.out.println(file.getAbsolutePath());}
}
File(File parent, String child)
——根据parent路径名字符串和child路径名字符串来创建一个新的File实例。
好处
父路径和子路径可以单独书写,使用起来非常灵活;父路径和子路径都可以变化。
父路径是File类型,可以使用File的方法对路径进行一些操作,在使用路径创建对象。
File fileparent = new File("c:\\abc");fileparent.mkdir();File file = new File(fileparent,"ccc.txt");file.createNewFile();System.out.println(file.getAbsolutePath());
File类中访问文件名相关的常用方法
public String getName()————返回此File标识的文件或目录的名称。
public String getPath()————将此File转换为路径名字符串。
public String getAbsolutePath()————返回此File的绝对路径名字符串,返回的是绝对路径。
public String getParent()————返回File对象所对应的目录(最后一级子目录)的父目录名称。
public boolean renameTo(File newName)————重命名此File对象所对应的文件或目录,成返回true
File类检查文件的相关常用方法
public boolean exists()————此File表示的文件或目录是否实际存在 。
public boolean isDirectory()————此File表示的是否为目录 。
public boolean isFile()————此File表示的是否为文件 。
public canWrite()————此File是否可写
public canRead()————此File是否可读
public isAbsolute()————此判断创建File对象时是不是用的是绝对路径
获取文件常规信息的常用方法
public long lastModified()————返回文件的最后修改时间。
public long length()————返回文件内容的长度。
File类创建删除文件的常用方法
public boolean creatNewFile()——当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
creatNewFile声明抛出了IOException,我们调用这个方法,就必须处理这个异常,要么throws,要么try catch
public boolean delete()——删除由此File表示的文件或目录。
此方法,可以删除构造方法路径中给出的文件/文件夹。注意delete方法直接在硬盘删除文件/文件夹,不走回收站,删除要谨慎。
public boolean mkdir()——创建由此File表示的目录。
创建单级空文件夹
public boolean mkdirs()——创建由此File表示的目录,包括任何必需但不存在的父目录。
既可以创建单级空文件夹,也可以创建多级文件夹
File类遍历(文件夹)目录功能
public String[ ] list( )——返回一个String数组,表示该File目录中的所有子文件或子目录。
public File[ ] listFiles( )——返回一个File数组,表示该File目录中的所有子文件或子目录。
注意
list方法和listFiles方法遍历的是构造方法中给出的目录。
如果构造方法中给出的目录的路径不存在,会抛出空指针异常。
如果构造方法中给出的路径不是一个目录,也会抛出空指针异常。
public class filefind {public static void main(String[] args) {File file=new File("C:\\Users\\Administrator\\Desktop\\STSWORKSPACE\\EduSystem");String[] fileNames = file.list();File[] files = file.listFiles();for(String filename:fileNames){System.out.println(filename);}for(File subfile:files){System.out.println(subfile);}}
}
----------------------------------------------------------------------.classpath
.mymetadata
.project
.settings
src
WebRoot
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\.classpath
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\.mymetadata
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\.project
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\.settings
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\src
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\WebRoot
文件过滤器的原理和使用
在File类中有两个listFiles重载的方法,方法的参数传递的就是过滤器。
File[ ] listFiles(FilesFilter filter)
java.io.FilesFilter 接口————用于抽象路径名(File对象)的过滤器。我常通过内部类的方式执行accept方法。
FilesFilter 接口里包含了一个抽象方法:boolean accept(File pathname)
参数
File pathname———使用listFiles方法遍历目录,得到的每一个文件对象。
例:找到一个目录下所有扩展名为.java的文件,并打印其绝对路径
public class filefind {public static void main(String[] args) {File file=new File("C:\\Users\\Administrator\\Desktop\\STSWORKSPACE\\EduSystem");//文件过滤器,筛选想要的文件getJavaFiles(file);}//获得所有.java文件public static void getJavaFiles(File file){if(!file.isDirectory()){return;}//是文件夹,进一步扫描File[] files = file.listFiles(new FileFilter() {@Overridepublic boolean accept(File subFile) {if(subFile.isDirectory()) return true;elsereturn subFile.getName().toLowerCase().endsWith(".java");}});for(File rsFile:files){if(rsFile.isDirectory()){getJavaFiles(rsFile); //递归,如果找到的子文件还是文件夹的话,再找}else{System.out.println(rsFile); //输入文件的绝对路径}}}
}
File[ ] listFiles(FilenameFilter filter)
java.io.FilenameFilter 接口————实现此接口的类实例可用于过滤文件名。
FilenameFilter接口里包含了一个抽象方法:boolean accept(File dir,String name)
参数
File dir ——————构造方法中传递的被遍历的目录
String name————使用lisFiles方法遍历目录,获取的每一个文件/文件夹的名称。
java IO流
Java IO流的概念
大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。
在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象的表述为“流”。
Java中的“流”都位于java.io包中,称之为IO(输入输出)流。
输入流和输出流是相对于内存设备而言的,将外设中的数据读取到内存中即输入,将内存的数据写入到外设中即输出。
注:java的输入流主要是InputStream和Reader作为基类,而输出流则是主要由outputStream和Writer作为基类。它们都是一些抽象基类,无法直接创建实例。
字节流和字符流的用法几乎完成全一样,区别在于字节流和字符流所操作的数据单元不同,
字节流操作的单元是数据单元是8位的字节,字符流操作的是数据单元为16位的字符。
字节流主要是由InputStream和outPutStream作为基类,而字符流则主要有Reader和Writer作为基类。
按照流的角色划分为节点流和处理流.
可以从/向一个特定的IO设备(如磁盘,网络)读/写数据的流,称为节点流。节点流也被称为低级流。
处理流则用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据的读/写功能。处理流也被称为高级流。
当使用处理流进行输入/输出时,程序并不会直接连接到实际的数据源,没有和实际的输入和输出节点连接。
使用处理流的一个明显的好处是,只要使用相同的处理流,程序就可以采用完全相同的输入/输出代码来访问不同的数据源
打个比方在进一步理解流的概念
java把所有设备里的有序数据抽象成流模型,简化了输入/输出处理。java IO流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java Io流的40多个类都是从如下4个抽象类基类中派生出来的。
InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
对于InputStream和Reader而言,它们把输入设备抽象成为一个”水管“,这个水管的每个“水滴”依次排列,如图
输入流使用隐式的记录指针来表示当前正准备从哪个“水滴”开始读取,每当程序从InputStream或者Reader里面取出一个或者多个“水滴”后,记录指针自定向后移动;除此之外,InputStream和Reader里面都提供了一些方法来控制记录指针的移动。
对于OutputStream和Writer而言,它们同样把输出设备抽象成一个”水管“,只是这个水管里面没有任何水滴,如图
当执行输出时,程序相当于依次把“水滴”放入到输出流的水管中,
输出流同样采用隐示指针来标识当前水滴即将放入的位置,
每当程序向OutputStream或者Writer里面输出一个或者多个水滴后,记录指针自动向后移动。
处理流可以“嫁接”在任何已存在的流的基础之上,这就允许Java应用程序采用相同的代码,
透明的方式来访问不同的输入和输出设备的数据流。
字节流和字符流的基类方法
IO体系的基类(InputStream/Reader,OutputStream/Writer)字节流和字符流的操作方式基本一致,
只是操作的数据单元不同——字节流的操作单元是字节,字符流的操作单元是字符。
所以字节流和字符流就整理在一起了。InputStream/Reader,OutputStream/Writer是所有输入/输出流的抽象基类,
本身并不能创建实例来执行输入/输出,
但它们将成为所有输入/输出流的模板,
所以它们的方法是所有输入/输出流都可使用的方法。
在InputStream里面包含读数据的方法。
int read(); 从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转换为int类型)。
int read(byte[] b) 从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数。
int read(byte[] b,int off,int len); 从输入流中最多读取len个字节的数据,并将其存储在数组b中,放入数组b中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数。
在Reader中包含也有如下3个方法。
int read(); 从输入流中读取单个字符,返回所读取的字符数据(字符数据可直接转换为int类型)。
int read(char[] b) 从输入流中最多读取b.length个字符的数据,并将其存储在字节数组b中,返回实际读取的字符数。
int read(char[] b,int off,int len); 从输入流中最多读取len个字符的数据,并将其存储在数组b中,放入数组b中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字符数。
InputStream和Reader提供的一些移动指针的方法:
void mark(int readlimit ); 在记录指针当前位置记录一个标记(mark)。
boolean markSupported(); 判断此输入流是否支持mark()操作,即是否支持记录标记。
void reset(); 将此流的记录指针重新定位到上一次记录标记(mark)的位置。
long skip(long n); 记录指针向前移动n个字节/字符。
OutputStream和Writer:
OutputStream和Writer的用法也非常相似,两个流都提供了如下三个方法:
void write(int c); 将指定的字节/字符输出到输出流中,其中c即可以代表字节,也可以代表字符。
void write(byte[]/char[] buf); 将字节数组/字符数组中的数据输出到指定输出流中。
void write(byte[]/char[] buf, int off,int len ); 将字节数组/字符数组中从off位置开始,长度为len的字节/字符输出到输出流中。
因为字符流直接以字符作为操作单位,所以Writer可以用字符串来代替字符数组,即以String对象作为参数。
Writer里面还包含如下两个方法:
void write(String str); 将str字符串里包含的字符输出到指定输出流中。
void write (String str, int off, int len); 将str字符串里面从off位置开始,长度为len的字符输出到指定输出流中。
输入输出流的体系
java输入/输出流体系中常用的流的分类
访问文件,数组,管道,字符串都是节点流,除了基类,节点流,其它是处理流类,处理流要与它结合起来才起作用。
下面是整理出这些IO流的特性及使用方法,只有清楚每个IO流的特性和方法。才能在不同的需求面前正确的选择对应的IO流进行开发。
1,文件输入输出流
<1.1>文件输入流
FileInputStream和FileReader,
它们都是节点流——会直接和指定文件关联。
public class inputstream {public static void main(String[] args) throws IOException {//把在c盘上一个文件读出来,如果文件是图片,视频,音频,要用字节流,文本文件,字节流,字符流都可用// InputStream is =new FileInputStream("C:\\a.txt");FileInputStream fis=null;try{fis = new FileInputStream("c:\\a.txt");//定义两个东西,一个水漂-数组,一个计数器byte[] b = new byte[1024];int hasRead = 0;while((hasRead=fis.read(b))>0){System.out.println(new String(b,0,hasRead));}}catch(Exception e){e.printStackTrace();}finally {//为什么必须有finally块呢?fis.close();}}
}
注:上面程序最后使用了fis.close()来关闭该文件的输入流,程序里面打开的文件IO资源不属于内存的资源,
垃圾回收机制无法回收该资源,所以必须在程序里关闭打开的IO资源。
Java 7改写了所有的IO资源类,它们都实现了AntoCloseable接口,因此都可以通过自动关闭资源的try语句来关闭这些IO流。
改进后的代码如下,不要finally块了
public class inputstream {public static void main(String[] args) {try(FileInputStream fis = new FileInputStream("c:\\a.txt")){//定义两个东西,一个水漂-数组,一个计数器byte[] b = new byte[1024];int hasRead = 0;while((hasRead=fis.read(b))>0){System.out.println(new String(b,0,hasRead));}}catch(Exception e){e.printStackTrace();}}}
相关文章:

IO模型与NIO基础
File类 File类主要是JAVA为文件这块的操作(如删除、新建等)而设计的相关类File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较 创建一个文件/文件夹 删除文件/文件夹 获取文件/文件夹 判断文件/文件夹是否存在 对文件夹进…...

上门按摩系统架构与功能分析
一、系统架构 服务端:Java(最低JDK1.8,支持JDK11以及JDK17)数据库:MySQL数据库(标配5.7版本,支持MySQL8)ORM框架:Mybatis(集成通用tk-mapper,支持…...
ubuntu安装ssh9.2
删除旧版本: dpkg --list|grep ssh apt remove sshwget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.2p1.tar.gz tar xzvf openssh-9.2p1.tar.gz cd openssh-9.2p1 #下载依赖#开始编译安装 ./configure && make && make inst…...
linux wsl配置 redis远程连接
✅ 1. 修改 Redis 配置文件 在 WSL 的 Redis 配置文件中,找到 redis.conf 或 /etc/redis/redis.conf 文件,编辑以下配置项: ➡️ 更新 bind 配置项 将 bind 127.0.0.1 ::1 修改为: bind 0.0.0.0这样,Redis 将监听所…...
JVM 优化指南
JVM 优化指南 1. JVM 参数配置 1.1 基础参数配置 设置堆内存大小 -Xms2048m -Xmx2048m 设置新生代大小 -Xmn1024m 设置元空间大小 -XX:MetaspaceSize256m -XX:MaxMetaspaceSize256m 设置线程栈大小 -Xss512k1.2 垃圾回收器配置 使用 G1 垃圾回收器 -XX:UseG1GC 设置期望停顿…...

关机重启后,GitLab服务异常
整理机房,关闭了所有主机重新上架。 上架后开机,所有主机硬件启动正常。 其中一台GitLab服务器启动正常,使用gitlab-ctl status查看服务业正常。 但使用web登陆却失败,如下图: 反复测试,发现无论使用正确密码还是错误密码都是同样的提示。很大可能是数据库的问题。 使…...

谷粒商城-高级篇完结-Sleuth+Zipkin 服务链路追踪
1、基本概念和整合 1.1、为什么用 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位 。主要体现在&#…...
C语言基本知识复习浓缩版:标识符、函数、进制、数据类型
C语言基本知识复习浓缩版:标识符、函数、进制、数据类型 【c语言期末复习3小时速成【完整全集】期末速成含考试题c语言期末速成突击复习C语言补考C语言期末大一】 B站看到的复习C语言视频,感觉非常棒,就跟着进行了一下学习。众所周知&#…...
selenium已经登陆了 我怎么查看 网页 在fRequest xhr 的数据呢
在使用 Selenium 登录网页后,查看网页的 XHR 请求数据可以通过以下几种方法: ### 1. 使用浏览器开发者工具 - **手动查看**: - 打开浏览器的开发者工具(按 F12 或右键点击页面元素选择“检查”)。 - 切换到“Netw…...
Bash语言的数据库编程
Bash语言的数据库编程 引言 在现代软件开发中,数据库编程是一个不可或缺的部分。从小型项目到大型系统,数据库通常是存储和管理数据的核心。然而,许多开发者往往将焦点放在高级编程语言如Python、Java或C#上,忽视了Shell脚本语言…...

易支付二次元网站源码及部署教程
易支付二次元网站源码及部署教程 引言 在当今数字化时代,二次元文化逐渐成为年轻人生活中不可或缺的一部分。为了满足这一庞大用户群体的需求,搭建一个二次元主题网站显得尤为重要。本文将为您详细介绍易支付二次元网站源码的特点及其部署教程…...
ios脚本巨魔商店多巴胺越狱基本操作教程
准备工作 确认设备兼容性:A9-A11(iPhone6s-X):iOS15.0-16.6.1;A12-A14(iPhoneXR-12PM):iOS15.0-16.5.1;A15-A16(iPhone13-…...

ScratchLLMStepByStep:SFT之分类微调
1. 引言 前面我们花了三节内容来介绍预训练,包括如何从零搭建、如何加速运算、如何分布式加速训练,本节开始我们将进入监督微调(SFT)阶段。 常见语言模型的微调任务有两类,分类微调和指令微调。 分类微调模型通常是…...

人工智能知识分享第十天-机器学习_聚类算法
聚类算法 1 聚类算法简介 1.1 聚类算法介绍 一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。 目的是将数据集中的对象分成多个簇(Cluster),使得同一簇内的对象相似度较高,而不同簇之间的对象相…...

MySQL和Hive中的行转列、列转行
水善利万物而不争,处众人之所恶,故几于道💦 文章目录 MySQL1.行转列2.列转行 Hive1.行转列2.列转行(1)侧窗(2)union MySQL 1.行转列 把多行转成列。直接group,sum(if()) 2.列转行 Hive 1.行转列 select name,sum(if(kmshuxu…...

汽车供应链关键节点:物流采购成本管理全解析
在汽车行业,供应链管理是一项至关重要的任务。汽车制造从零部件的生产到整车的交付,涉及多个环节,其中物流、采购与成本管理是核心节点。本文将深入分析这些关键环节,探讨如何通过供应商管理系统及相关工具优化供应链管理。 一、…...

USB 驱动开发 --- Gadget 设备连接 Windows 免驱
环境信息 测试使用 DuoS(Arm CA53, Linux 5.10) 搭建方案验证环境,使用 USB sniff Wirekshark 抓包分析,合照如下: 注:左侧图中设备:1. 蓝色,USB sniff 非侵入工 USB 抓包工具;2. …...
计算机网络之---数据链路层的功能与作用
数据链路层概念 数据链路层(Data Link Layer)是计算机网络中的第二层,它位于物理层和网络层之间,主要负责数据在物理链路上的可靠传输。其基本功能是将网络层传来的数据分成帧,并负责在物理链路上可靠地传输这些数据帧…...

前端 图片上鼠标画矩形框,标注文字,任意删除
效果: 页面描述: 对给定的几张图片,每张能用鼠标在图上画框,标注相关文字,框的颜色和文字内容能自定义改变,能删除任意画过的框。 实现思路: 1、对给定的这几张图片,用分页器绑定…...
为什么HTTP请求后面有时带一个sign参数(HTTP请求签名校验)
前言 最近在开发过程中,发现前端有很多的接口发送请求时都会携带signxxxx参数,但是后端明明没有写,也不需要这个参数,后面才知道,这个前面是为了给http请求签名,主要是为了防止请求体和请求参数被拦截篡改…...
DOM(文档对象模型)深度解析
DOM(文档对象模型)深度解析 DOM 是 HTML/XML 文档的树形结构表示,提供了一套让 JavaScript 动态操作网页内容、结构和样式的接口。 一、DOM 核心概念 1. 节点(Node)类型 类型值说明示例ELEMENT_NODE1元素节点<div>, <p>TEXT_NODE3文本节点元素内的文字COMMEN…...
【Unity】R3 CSharp 响应式编程 - 使用篇(二)
一、通用的事件监听用法 using System;using R3;using UnityEngine;namespace Aladdin.Standard.Observable.Common{public class CommonObservable : MonoBehaviour{// 默认会调用1次public SerializableReactiveProperty<int> serializableReactiveProperty;…...
软考 系统架构设计师系列知识点之杂项集萃(81)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(80) 第145题 商业智能是企业对商业数据的搜集、管理和分析的系统过程,主要技术包括()。 A. 数据仓库、联机分析和数据挖掘 B. 数据采集、数据清洗…...
数据库、数据仓库、数据中台、数据湖相关概念
文章目录 序言1数据库,数据仓库,数据中台,数据湖-概念对比释义1.1概念产生的时间顺序1.2在使用功能方面对比1.3在使用工具方面对比 2数据仓库2.1数据仓库的发展阶段2.2 数据仓库的设计2.3数据仓库常用工具,方法2.3.1分析型数据库和…...

Python训练打卡Day43
复习日 1.卷积神经网络的基本概念 2.kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 tips:注册kaggle的注意事项 安装插件:Header Editor 然后打开扩展选项: 输入网址:ht…...

uni-app学习笔记二十四--showLoading和showModal的用法
showLoading(OBJECT) 显示 loading 提示框, 需主动调用 uni.hideLoading 才能关闭提示框。 OBJECT参数说明 参数类型必填说明平台差异说明titleString是提示的文字内容,显示在loading的下方maskBoolean否是否显示透明蒙层,防止触摸穿透,默…...

Python----目标检测(yolov5-7.0安装及训练细胞)
一、下载项目代码 yolov5代码源 GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite yolov5-7.0代码源 Release v7.0 - YOLOv5 SOTA Realtime Instance Segmentation ultralytics/yolov5 GitHub 二、创建虚拟环境 创建一个3.8…...

CAD实体对象智能识别
CAD实体对象智能识别 概述 实体对象智能识别能够在CAD图纸中智能识别和匹配相似的实体对象。该系统采用模式匹配算法,支持几何变换(缩放、旋转),并提供了丰富的配置选项和可视化界面。 系统提供两种主要的识别方式:…...

音频剪辑软件少之又少好用
我们平时见到的图片以及视频编辑工具非常多,但是音频剪辑软件却是少之又少,更不用说有没有好用的,今天,给大家带来一款非常专业的音频剪辑软件,而且是会员喔。 软件简介 一款手机号登录即可以享受会员的超专业音频剪…...

如何打造一款金融推理工具Financial Reasoning Workflow:WebUI+Ollama+Fin-R1+MCP/RAG
在之前的文章中,我探讨了如何使用具身人工智能,让大语言模型智能体来模仿[当今著名对冲基金经理的投资策略]。 在本文中,我将探讨另一种方法,该方法结合了经过金融推理训练的特定大语言模型(LLM)࿰…...