Go IO之文件处理,TCPUDP讲解
文章目录
- 1 文件处理
- 1.1 打开和关闭文件
- 1.2 读取文件
- 1.2.1 简单示例
- 1.2.2 中文乱码
- 1.2.2.1 bufio
- 1.2.2.2 ioutil
- 1.3 写入文件
- 1.3.1 Write 和 WriteString
- 1.3.2 fmt.Fprintln
- 1.3.2.1 写入文件
- 1.3.2.2 写入标准输出
- 1.3.3 bufio.NewWriter
- 1.3.4 ioutil.WriteFile
- 2 TCP&UDP
- 2.1 TCP
- 2.1.1 服务端
- 2.1.2 客户端配置
- 2.2 UDP
- 2.2.1 服务端配置
- 2.2.2 客户端配置
1 文件处理
1.1 打开和关闭文件
os.open()
函数能够打开一个文件,返回一个 *File
和一个 err
,对得到的文件使用 close()
方法能够关闭文件。
package mainimport ("fmt""os"
)// 打开关闭文件
func main() { // 打开当前目录下的 abc.txt 文件file,err := os.Open("./abc.txt")if err != nil { fmt.Println("文件打开失败",err)} else { fmt.Println("文件打开成功")file.Close() // 从内存释放资源fmt.Println("文件关闭成功")}
}
/*
文件打开成功
文件关闭成功
*/
1.2 读取文件
接收一个字节切片
,返回读取的字节数
和可能的具体错误
,读到文件末尾时会返回 0
和 io.EOF
。
func (f *File) Read(b []byte) (n int, err error)
1.2.1 简单示例
package mainimport ("fmt""io""os"
)// 打开关闭文件
func main() { // 打开当前目录下的 abc.txt 文件file,err := os.Open("./abc.txt")if err != nil { fmt.Println("文件打开失败",err)return}// 文件能打开defer file.Close() // 使用 defer 延迟开关,main 函数即将结束前释放文件资源fmt.Println("文件成功打开")// 读文件var tmp [128]byte // 定义一个字节切片,每次读 128 字节n,err := file.Read(tmp[:])// 文件读完if err == io.EOF { fmt.Println("文件已读完")return}// 读取中报错if err != nil { fmt.Println("Read from file failed,err",err)return}fmt.Printf("读取 %d 个字节\n",n)fmt.Println(string(tmp[:]))// fmt.Printf("获取的内容是:%s\n",string(tmp[:]))
}/*
读取 23 个字节
adadadsad
sdsadasdas
*/
循环读取文件
package mainimport ("fmt""io""os"
)// 打开关闭文件
func main() { // 打开当前目录下的 abc.txt 文件file,err := os.Open("./abc.txt")if err != nil { fmt.Println("文件打开失败",err)return}// 文件能打开defer file.Close() // 使用 defer 延迟开关,main 函数即将结束前释放文件资源fmt.Println("文件成功打开")// 读文件var tmp [128]byte // 定义一个字节切片,每次读 128 字节// for 循环读取内容,输出到程序中for { _,err := file.Read(tmp[:])// 文件读完if err == io.EOF { fmt.Println("文件已读完",err)return}// 读取中报错if err != nil { fmt.Println("Read from file failed,err",err)return}fmt.Printf("%s",string(tmp[:]))}
}
1.2.2 中文乱码
1.2.2.1 bufio
如果有乱码,可以使用 bufio
读取。bufio
在 file
的基础上封装了一层 API
,支持更多的功能。
package main
import ("fmt""os""io""bufio"
)// bufio 读数据
func main() { file,err := os.Open("./abc.txt")if err != nil { fmt.Println("文件打开失败",err)return}defer file.Close()// 封装一个 API 层// 利用缓冲区从文件读数据reader := bufio.NewReader(file)for { str,err := reader.ReadString('\n') // 字符if err == io.EOF { fmt.Print(str) // 要输出,否则不显示return}if err != nil { fmt.Println("读取文件内容失败",err)return}fmt.Print(str) // 取消文件中的自带换行}
}
示例:读取奇/偶数行
package mainimport ("bufio""fmt""io""os"
)// bufio 读数据
func main() { file, err := os.Open("./abc.txt")if err != nil { fmt.Println("文件打开失败", err)return}defer file.Close()// 利用缓冲区从文件读数据reader := bufio.NewReader(file)count := 0for { // 输出奇数行str, _, err := reader.ReadLine()count++if err == io.EOF { return}if err != nil { fmt.Println("读取文件内容失败", err)return}if count%2 == 1 { // 0 为偶数fmt.Println(string(str))}}
}
1.2.2.2 ioutil
package mainimport ("fmt""io/ioutil"
)
// ioutil 读取文件
func readFile(filename string) { content,err := ioutil.ReadFile(filename)if err != nil { fmt.Println("READ FILE FAILED,ERR:",err)return}fmt.Println(string(content))
}
func main() { readFile("./abc.txt")
}
1.3 写入文件
os.OpenFile()
函数能够以指定模式打开文件,从而实现文件写入相关功能。
func OpenFile(name string, flag int, perm FileMode)(*File,error) { ...
}
说明:
- name:要打开的文件名
- flag:打开文件的模式
模式种类:os.O_WRONLY
:只写os.O_CREATE
:创建文件os.O_RDONLY
:只读vos.O_RDWR
:读写os.O_TRUNC
:清空os.O_APPEND
:追加
- perm:文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。
1.3.1 Write 和 WriteString
package mainimport ("fmt""os"
)
// 打开文件支持文件写入
func main() { // 创建 tmp.txt 文件,分配权限 755file,err := os.OpenFile("tmp.txt",os.O_CREATE|os.O_WRONLY,0755)if err != nil { fmt.Println("打开文件失败",err)return}defer file.Close()// 定义写入内容str := "hello world"// 字节方式写入file.Write([]byte("this is test\n"))// 字符串方式写入defer file.WriteString(str)
}/* tmp.txt
this is test
hello world
*/
1.3.2 fmt.Fprintln
1.3.2.1 写入文件
fmt.Fprintln(f, v)
是 把 v 的内容写入到 f
中。
解释:
- f 是一个
io.Writer
类型的对象,表示你要写入数据的目标。常见的目标包括文件、标准输出(os.Stdout)、缓冲区等。 - v 是希望写入到 f 中的数据,v 可以是任何可以格式化的类型,例如 string、int、struct 等。
fmt.Fprintln(f, v)
的作用是将 v 的值写入 f 中,并且在写入的值后面会自动添加换行符 \n
。
package mainimport ("fmt""os"
)func main() {// 创建或打开文件f, err := os.Create("output.txt")if err != nil {fmt.Println("Error creating file:", err)return}defer f.Close()// 要写入文件的内容v := "Hello, world!"fmt.Fprintln(f, v) // 将 v 写入文件 f
}
1.3.2.2 写入标准输出
如果想把某个值写到控制台
fmt.Fprintln(os.Stdout, "Hello, Go!")
这个代码会将字符串 “Hello, Go!” 输出到标准输出(即控制台)
1.3.3 bufio.NewWriter
package mainimport ("fmt""os""bufio"
)
// 打开文件支持文件写入
func main() { file,err := os.OpenFile("tmp.txt",os.O_CREATE|os.O_WRONLY|os.O_TRUNC,0666)if err != nil { fmt.Println("打开文件失败",err)return}defer file.Close()// 定义写入内容write := bufio.NewWriter(file)defer write.Flush() // 确保缓冲区数据被写入for i:=0;i<10;i++ { write.WriteString("hello world\n") // 将数据写入缓存}
} /* tmp.txt
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
*/
1.3.4 ioutil.WriteFile
package mainimport ("fmt""io/ioutil"
)func main() { str := "hello world\nthis is test"// 字符串转换为字节数组写入err := ioutil.WriteFile("./tmp.txt",[]byte(str),0666)if err != nil { fmt.Println("文件写入错误",err)return}
}/* tmp.txt
hello world
this is test
*/
2 TCP&UDP
2.1 TCP
2.1.1 服务端
一个服务端连接多个客户端,例如:世界各地的用户使用自己电脑的浏览器访问淘宝网。
package mainimport ("fmt""net"
)
/* TCP 服务端 */
// 处理客户端连接函数
func process(conn net.Conn) { defer conn.Close()var buf [1024]byten,err := conn.Read(buf[:]) // 读取切片数据if err != nil { fmt.Println("read err:",err)return}str := string(buf[:n]) // 转换字符串fmt.Println("收到客户端发来的数据:",str)
}func main() { // 1. 监听端口listener,err := net.Listen("tcp","127.0.0.1:20000")// 连接失败处理if err != nil { fmt.Println("启动服务失败,err:",err)return}// 程序退出时释放端口defer listener.Close() for { // 2. 建立连接// conn 是返回的接口conn,err := listener.Accept()if err != nil { fmt.Println("接收客户端连接失败,err",err)continue // 继续阻塞,等待客户端再次连接}// 3. 启动一个 goroutine 处理客户端连接go process(conn)}
}
2.1.2 客户端配置
package mainimport ("fmt""net"
)/* TCP 客户端配置 */
func main() { // 1. 拨号方式建立与服务端连接conn,err := net.Dial("tcp","127.0.0.1:20000")if err != nil { fmt.Println("连接服务端失败,err:",err)return}// 注意:关闭连接位置,不能写在连接失败判断上面defer conn.Close()// 2. 向 server 发送信息// fmt.Fprintln(conn,"hello")_,err = conn.Write([]byte("hello,tom"))if err != nil { fmt.Println("发送消息失败,err:",err)return}
}
2.2 UDP
UDP是用户数据报协议,是一种无连接传输协议,不需要建立连接就可以直接发送和接收数据,属于不可靠的,没有时序的通信,UDP 实时性好,适合直播环境。
2.2.1 服务端配置
package mainimport ("fmt""net"
)/* UDP 服务端 */
func main() { // 1. 监听listener,err := net.ListenUDP("udp",&net.UDPAddr { IP: net.ParseIP("127.0.0.1"),Port: 30000,})if err != nil { fmt.Println("启动 server 失败,err:",err)return}// 退出时关闭资源defer listener.Close()// 循环收发数据for { var buf [1024]byte// 因为是无连接,所以需要知道对方地址 Addrn,addr,err := listener.ReadFromUDP(buf[:])if err != nil { fmt.Println("接收消息失败,err:",err)return}fmt.Printf("接收到来自 %v 的消息:%v\n",addr,string(buf[:n]))// 回复消息n,err = listener.WriteToUDP([]byte("hi"),addr)if err != nil { fmt.Println("回复失败,err:",err)return}}
}
2.2.2 客户端配置
package mainimport ("fmt""net"
)/* UDP 客户端 */
func main() { // 连接 UDP 服务器conn,err := net.Dial("udp","127.0.0.1:30000")if err != nil { fmt.Println("连接失败,err:",err)return}defer conn.Close()// 发送消息n,err := conn.Write([]byte("hello"))if err != nil { fmt.Println("发送失败,err:",err)return}// 接收消息var buf [1024]byten,err = conn.Read(buf[:]) // n 为返回的有效字节个数if err != nil { fmt.Println("接收消息失败,err:",err)return}fmt.Println("收到回复:",string(buf[:n]))
}
相关文章:
Go IO之文件处理,TCPUDP讲解
文章目录 1 文件处理1.1 打开和关闭文件1.2 读取文件1.2.1 简单示例1.2.2 中文乱码1.2.2.1 bufio1.2.2.2 ioutil 1.3 写入文件1.3.1 Write 和 WriteString1.3.2 fmt.Fprintln1.3.2.1 写入文件1.3.2.2 写入标准输出 1.3.3 bufio.NewWriter1.3.4 ioutil.WriteFile 2 TCP&UDP2…...
[卫星遥感] 解密卫星目标跟踪:挑战与突破的深度剖析
目录 [卫星遥感] 解密卫星目标跟踪:挑战与突破的深度剖析 1. 卫星目标跟踪的核心挑战 1.1 目标的高速与不确定性 1.2 卫星传感器的局限性 1.3 数据处理与融合问题 1.4 大尺度与实时性要求 2. 当前卫星目标跟踪的主流技术 2.1 卡尔曼滤波(Kalman …...
U盘提示格式化?原因、恢复方案与预防措施全解析
一、U盘提示格式化现象概述 在日常使用U盘的过程中,我们有时会遇到一个令人头疼的问题——U盘插入电脑后,系统却弹出一个提示框,告知我们U盘需要格式化才能访问。这个提示往往伴随着数据的潜在丢失风险,让我们不禁为之心焦。U盘提…...
Vuex中dispatch的用法
在 Vuex 中,dispatch 是用于触发 actions 的方法,它的主要作用是调用一个 action 并可以传递一些参数。以下是关于 dispatch 的详细解释: 基本语法 dispatch(type, payload)type:要调用的 action 的名称,它是一个字符…...
Agent系列:AppAgent v2-屏幕智能Agent(详解版)
引言 简介 方法 Agent 框架 Agent 交互 探索阶段 部署阶段 文档生成 高级功能 实验结果 总结 局限性 未来工作 1. 引言 大语言模型(LLM)如 ChatGPT 和 GPT-4 显著提升了自然语言处理能力,并且推动了智能体在自主决策中的应用。…...
Word如何插入图片并移动到某个位置
Word如何插入图片并移动到某一个位置 新建word→插入→图片 选择合适的位置→选择图片→打开 点击图片→布局选项→选择文字环绕下的任意一个→固定在页面上 点击图片就可以将图片移动到任意位置...
[CTF/网络安全] 攻防世界 upload1 解题详析
姿势 在txt中写入一句话木马<?php eval($_POST[qiu]);?> 回显如下: 查看源代码: Array.prototype.contains function (obj) { var i this.length; while (i--) { if (this[i] obj) { return true; } } return false; } function …...
golang:微服务架构下的日志追踪系统(二)
背景 在使用Gin框架进行服务开发时,我们遇到了一个日志记录的问题。由于Gin的上下文(*gin.Context)实现了context.Context接口,在调用日志记录器的Info、Warn、Error等方法时,直接传递Gin的上下文通常不会导致编译错误…...
单片机的存储器类型
单片机(Microcontroller Unit, MCU)是一种将计算机的主要部分集成在一个芯片上的微型计算机。它集成了处理器(CPU)、存储器、输入输出接口等必要的功能模块,广泛应用于各种嵌入式系统中。单片机的存储器结构对于理解和使用单片机至关重要&…...
深入剖析MySQL数据库架构:核心组件、存储引擎与优化策略(一)
sql语句分为两大类:查询(select)、增删改----修改(update) select语句的执行流程 执行sql语句的流程:连接数据库、缓存查询、解析器、优化器、执行器、存储引擎操作数据 客户端:图形界面工具…...
java常见的面试题
目录 一、 spring的配置文件的哪四处? 1.数据源(Data Source)配置 2.事务管理器(Transaction Manager)配置 3. 扫描组件(Component Scanning)配置 4. AOP(面向切面编程)配置&…...
2025吉林大学软件学院研究生人工智能原理真题
选择题 5题共10分 5.以下模型不需要训练过程的是? A.支持向量机 B.决策树 C.KNN近邻算法 D.卷积神经网络 简答题 4题35分 1.大模型是否已经通过图灵测试 2.三个近二十年来的机器学习模型和应用案例 3.LDA原理和算法流程 4.CNN原理和算法流程 证明题 谓词逻辑15…...
Qt判别不同平台操作系统调用相应动态库读取RFID
本示例使用的读卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b8jdyXi&ftt&id562957272162 #include <QDebug> #include "mainwindow.h" #include "./ui_mainwindow.h" #include "QLibrary"…...
智慧工地系统:建筑施工智能化管理的全新模式
智慧工地概述 智慧工地是将互联网的理念和和物联网的技术引入建筑工地,依托物联网、互联网、大数据、5G技术,建立云端数据平台,形成大数据的业务体系,打通一线操作与远程监管的链条,实现劳务、安全、环境、材料等各个…...
js将object整个实体对象作为参数传递
①将object实体转化成json字符串传递: JSON.stringify(obj) ②将json字符串转化成JSON对象值:JSON.parse(json) 实际应用: <div id"div_notice" stylefont-size:14px; width:100%; height:200px; overflow-y:auto;></di…...
shell的循环结构
1、思维导图 2、定义一个find函数,查找ubuntu和root的gid并使用变量接收结果 #!/bin/bash #第二题查找gid并返回结果 find() {u_gidid -g ubuntur_gidid -g rootecho "root-gid$r_gid"echo "ubuntu-gid$u_gid" } ret$(find) echo $ret3、定义一…...
STM32-笔记29-蓝牙遥控插座项目
一、实验前期准备 手机通过蓝牙模块远程遥控风扇。(插座的原理就是继电器,所以控制继电器就是控制插座电源) 二、项目实现 复制项目文件夹32-蓝牙模块实现,重命名33-蓝牙遥控插座项目 找到一个继电器项目,把继电器复…...
计算机网络复习(习题)
术语辨析 数据链路层 该层在两个通信实体之间传送以帧为单位的数据,通过差错控制方法,使有差错的物理线路变成无差错数据链路。 网络层 负责使分组以适当的路径通过通信子网的层次。 运输层 负责向两台主机中进程之间的通信提供通用的数据传输服务的层次。 应用层…...
webserver的http实现
1、用了状态机,为什么要用状态机? 在逻辑处理模块中,响应的http请求采用主从状态机完成, 传统的控制流程都是按照顺序执行的,状态机能够处理任意顺序的事件,并能提供有意义的响应--即使这些事件发生的顺序和…...
C语言----指针
目录 1.概念 2.格式 3.指针操作符 4.初始化 1. 将普通变量的地址赋值给指针变量 a. 将数组的首地址赋值给指针变量 b. 将指针变量里面保存的地址赋值给另一个指针变量 5.指针运算 5.1算术运算 5.2 关系运算 指针的大小 总结: 段错误 指针修饰 1. con…...
Elasticsearch与数据库数据一致性:最佳实践与解决方案
在现代应用程序中,Elasticsearch(ES)作为一个高效的分布式搜索引擎,常常与数据库一同使用,以提供强大的搜索、分析和数据可视化功能。然而,数据库和Elasticsearch之间的同步与一致性常常成为一个挑战。如何…...
C# 基本语法
C# 基本语法 介绍 C#(读作 "C sharp")是一种现代的、面向对象的编程语言,由微软开发,并在2000年首次发布。它是.NET框架的一部分,被广泛用于开发各种类型的应用程序,包括桌面应用、Web应用、移…...
CDGA|浅析自动化对数据治理的深远影响
在数字化时代,数据治理已成为企业管理的核心议题之一。随着数据量的快速增长和复杂性的不断提升,传统的手工数据管理方式已难以满足企业的需求。而自动化技术的引入,为数据治理带来了新的动力,正在逐步改变数据治理的面貌。 自动化…...
【机器学习】【朴素贝叶斯分类器】从理论到实践:朴素贝叶斯分类器在垃圾短信过滤中的应用
🌟 关于我 🌟 大家好呀!👋 我是一名大三在读学生,目前对人工智能领域充满了浓厚的兴趣,尤其是机器学习、深度学习和自然语言处理这些酷炫的技术!🤖💻 平时我喜欢动手做实…...
小程序租赁系统的优势与应用探索
内容概要 小程序租赁系统,听起来很高大上,但实际上它比你想象的要实用得多!设想一下,几乎所有的租赁需求都能通过手机轻松解决。这种系统的便捷性体现在让用户随时随地都能发起租赁请求,而不再受制于传统繁琐的手续。…...
汇编环境搭建
学习视频 将MASM所在目录 指定为C盘...
ubuntu24.04使用open-vm-tools无法在主机和虚拟机之间拖拽文件夹
最近安装了vmware用ubuntu24.04作为虚拟机 然后发现无法在主机和虚拟机之间复制粘贴 然后安装了 sudo apt-get install open-vm-tools-desktop重启虚拟机,发现可以复制粘贴文字,但是文件和文件夹仍然不行 搜索发现是Ubuntu(22.04࿰…...
C++软件设计模式之模板方法模式
模板方法模式是面向对象软件设计模式之一,其主要意图是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤。 动机 在软件开发中,常常会遇到这样的情…...
20241231 机器学习ML -(2)KNN(scikitlearn)
1. build DKTree 递推创建Tree;当前维度找中位数分割 数据集 left set,Node(mid), right set. * 循环维度(当log(Nsample)>featureSize) 2. DKTree KNN search * 理论部分向量几何有介绍。 每个维度列中,中位数对应的数据点…...
Prometheus之终极指南(The Ultimate Guide to Prometheus)
Prometheus之终极指南 Prometheus 彻底改变了我们在现代 DevOps 生态系统中监控基础设施、应用程序和服务的方式。它不仅仅是一个工具;它是一个由指标收集、告警和实时监控组成的生态系统,受到 Uber、Google 和 SoundCloud 等组织的信任。在本文中&…...
如何使用Python调用淘宝api接口获取商品详情信息?
使用 Python 调用淘宝 API 接口获取商品详情信息,可按照以下步骤进行: 注册并获取 API 密钥 访问淘宝api文档,点击 “立即测试” 按钮,按照提示完成注册流程。注册成功后,登录测试平台,进入 “控制台” 页面…...
ubuntu 22下解决Unment dependencies问题
问题现象 在使用apt安装包的时候,出现如下错误: 解决方案 第一步 sudo apt-get -f install sudo apt-get update sudo apt-get upgrade第二步 sudo apt-get update sudo apt-get clean sudo apt-get autoremove第三步 sudo apt --fix-broken inst…...
leetcode 热题100(155. 最小栈)multiset c++
链接:155. 最小栈 - 力扣(LeetCode) 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。…...
某小程序sign签名参数逆向分析
文章目录 1. 写在前面2. 接口分析3. 分析还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...
阿里云redis内存优化——PCP数据清理
在阿里云安装了一个redis节点,今天使用时忽然想着点击了一下分析内存。好家伙,居然崩出了一个30多M的块出来。问题是我本地安装的redis没有这个啊,怎么奇怪冒出这个来了。 本着把系统用干榨尽的态度,研究了下这个问题的来源。网上…...
YOLOv10-1.1部分代码阅读笔记-head.py
head.py ultralytics\nn\modules\head.py 目录 head.py 1.所需的库和模块 2.class Detect(nn.Module): 3.class Segment(Detect): 4.class OBB(Detect): 5.class Pose(Detect): 6.class Classify(nn.Module): 7.class WorldDetect(Detect): 8.class RTDETRDec…...
java开发中注解汇总
注解作用位置注意mybatis Data Getter Setter ToString EqualsAndHashCode AllArgsConstructor NoArgsConstructor Data 代替:无参构造,get,set,toString,hashCode,equals Getter Setter 可放在类和方法上&…...
Java开发 PDF文件生成方案
业务需求背景 业务端需要能够将考试答卷内容按指定格式呈现并导出为pdf格式进行存档,作为紧急需求插入。导出内容存在样式复杂性,包括特定的字体(中文)、字号、颜色,页面得有页眉、页码,数据需要进行表格聚…...
Python机器学习笔记(十七、分箱、离散化、线性模型与树)
数据表示的最佳方法:取决于数据的语义,所使用的模型种类。 线性模型与基于树的模型(决策树、梯度提升树和随机森林)是两种成员很多同时又非常常用的模 型,它们在处理不同的特征表示时就具有非常不同的性质。我们使用w…...
[极客大挑战 2019]Http 1
进入环境: 检查源码发现有一个链接,但是这里没有绑定,需要手动跳转,打开后,发现提示: 这里就是需要我们从https://Sycsecret.buuoj.cn来访问它 因此我们抓包,使用referer:服务器伪造…...
最近学习shader的一些总结
旨在总结最近学习shader过程中一些关键要素,强化下记忆,如果有错误也烦请指出。 1.Properties 可调节变量,用于定义从外部传入到内部的变量, 以及外部通过访问这些变量名, 可以获取这些变量的值 其中定义时指定的类型, 在后文中类型不一定相同(基本不…...
庐山派K230学习日记1 从点灯到吃灰
1 简介 庐山派以K230为主控芯片,支持三路摄像头同时输入,典型网络下的推理能力可达K210的13.7倍(算力约为6TOPS)。支持CanMV,可作为AI与边缘计算平台 K230简介 K230芯片集成了两颗RISC-V处理器核心,双核…...
在Swagger(现称为OpenAPI)中各类@api之间的区别
在Swagger(现称为OpenAPI)中,ApiOperation 是用来描述单个API操作的注解。除此之外,Swagger还提供了其他一些类似的注解,它们用于不同层次或目的来增强API文档的详细程度和可读性。以下是这些注解及其之间的区别&#…...
【网络协议】开放式最短路径优先协议OSPF详解(二)
前言 第一部分:【网络协议】开放式最短路径优先协议OSPF详解(一) 在第一部分中,我们了解了链路状态路由协议并讨论了 OSPF 的工作原理,同时学习了如何配置 OSPF。在本章的第二部分中,我们将进一步探讨 OS…...
windows文件夹自定义右键调用powershell完成7zip加密打包
准备powershell脚本 2. regedit的路径是:计算机\HKEY_CLASSES_ROOT\Directory\shell\,在此项目下新增子项目diy_command\command,command的数据值为powershell D:\windowsProjects\directory_diy.ps1 %1 效果,点击后进入和power…...
MySQL 入门教程
MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 在本教程中,会让大家快速掌握MySQL的基本知识,并轻松使用MySQL数据库。 什么…...
BOOST 库在机器视觉中的应用及示例代码分析
一、引言 机器视觉是一门让计算机模拟人类视觉功能,对图像或视频数据进行理解、分析和决策的学科领域。在机器视觉的开发过程中,常常需要高效处理各种数据结构、进行数值计算、实现多线程并行处理以及运用优秀的算法框架等。BOOST 库作为一个功能强大、…...
第二十六天 自然语言处理(NLP)词嵌入(Word2Vec、GloVe)
自然语言处理(NLP)中的词嵌入(Word2Vec、GloVe)技术,是NLP领域的重要组成部分,它们为词汇提供了高维空间到低维向量的映射,使得语义相似的词汇在向量空间中的距离更近。以下是对这些技术的详细解…...
Log4j2 详解(异步日志打印及CSV格式日志输出)
Log4j2 详解 Apache Log4j2 是一个功能强大的 Java 日志记录框架,提供高性能和灵活的配置。本文档涵盖了 Log4j2 的核心功能及其详细使用方式,包括基础配置、异步日志、CSV 格式日志的输出以及使用注意事项。 一 Log4j2 基础概念与配置 1.1 Log4j2 介绍…...
[网络安全] DVWA之Content Security Policy (CSP) Bypass 攻击姿势及解题详析合集
CSP概念 CSP 是 Content Security Policy(内容安全策略)的缩写,是一种用于增强 Web 应用程序安全性的安全机制。它通过允许网站管理员控制页面中加载内容的来源来减少跨站脚本攻击(XSS)等常见的安全风险。 CSP 的工作…...