Golang学习笔记_22——Reader示例
Golang学习笔记_19——Stringer
Golang学习笔记_20——error
Golang学习笔记_21——Reader
文章目录
- `io.Reader` 示例
- 从字符串中读取
- 从文件中读取
- 从HTTP响应中读取
- 从内存的字节切片中读取
- 自定义`io.Reader`实现
- 源码
io.Reader 示例
从字符串中读取
func ReadFromStrDemo() {str := "hello world"reader := bufio.NewReader(strings.NewReader(str))buf := make([]byte, 2)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}
测试方法
func TestReadFromStrDemo(t *testing.T) {ReadFromStrDemo()
}
输出结果
=== RUN TestReadFromStrDemo
he
ll
o
wo
rl
d
--- PASS: TestReadFromStrDemo (0.00s)
PASS
从文件中读取
func ReadFromFileDemo() {file, err := os.Open("test.txt")if err != nil {fmt.Println("Error opening file", err)return}defer file.Close()reader := bufio.NewReader(file)buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}
测试方法
func TestReadFromFileDemo(t *testing.T) {ReadFromFileDemo()
}
输出结果
=== RUN TestReadFromFileDemo
h
e
l
l
oi
o
.
R
e
a
d
e
r
--- PASS: TestReadFromFileDemo (0.00s)
PASS
从HTTP响应中读取
func ReadFromHTTPResponseDemo() {resp, err := http.Get("https://www.bing.com")if err != nil {fmt.Println("Error", err)return}defer resp.Body.Close()if resp.StatusCode != http.StatusOK {fmt.Println("StatusCode", resp.StatusCode)return}body, err := io.ReadAll(resp.Body)if err != nil {fmt.Println("Error", err)return}fmt.Println(string(body))}
测试文件
func TestReadFromHTTPResponseDemo(t *testing.T) {ReadFromHTTPResponseDemo()
}
输出结果
=== RUN TestReadFromHTTPResponseDemo
<!doctype html><html lang="zh" dir="ltr"><head><meta name="theme-color" content="#4F4F4F" /><meta name="description" content="使用 Microsoft 必应进行搜索,并利用 AI 的强大功能查找信息、浏览网页、图像、视频、地图等。为永远充满好奇心的人提供的智能搜索引擎。" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta property="fb:app_id" content="3732605936979161" /><meta property="og:type" content="website" /><meta property="og:title" content="变换的地平线" /><meta property="og:image" content="https://www.bing.com/th?id=OHR.NamibiaDunes_ZH-CN5102483490_tmb.jpg&rf=" /><meta property="og:image:width" content="1366" /><meta property="og:image:height" content="768" /><meta property="og:url" content="https://www.bing.com/?form=HPFBBK&ssd=20250108_1600&mkt=zh-CN" /><meta property="og:site_name" content="搜索 - Microsoft 必应" /><meta property="og:description" content="想象在日出时分,连绵起伏的沙丘泛着橙色光芒,延伸至视野尽头,欢迎来到横跨纳米比亚数千英里的纳米布沙漠" /><title>搜索 - Microsoft 必应</title><link href="https://cn.bing.com/" rel="canonical" /><link rel="preconnect" href="https://r.bing.com" /><link rel="preconnect" href="https://r.bing.com" crossorigin/><link rel="dns-prefetch" href="https://r.bing.com" /><link rel="dns-prefetch" href="https://r.bing.com" crossorigin/><link rel="stylesheet" href="/rp/RCJCS6O5TykkUhXX1pwc6RsdyuI.gz.css" type="text/css"/><script type="text/javascript" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=">//<![CDATA[
var __assign=this&&this.__assign||function(){return __assign=Object.assign||function(n){for(var t,r,i=1,u=arguments.length;i<u;i++){t=arguments[i];for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},__assign.apply(this,arguments)},logE=function(n,t,i){t===void 0&&(t=null);i===void 0&&(i="ClientInst");var r=[__assign({T:"CI.".concat(i),FID:"CI",Name:n},t&&{Text:t})],u="".concat(_G.lsUrl,"&Type=Event.ClientInst&DATA=").concat(encodeURIComponent(JSON.stringify(r)));(new Image).src=u},CSPIF;window.CSPEL=[];CSPIF=function(n){var t="clarity",i="CSPViolation",r,u;return(window[t]&&(window[t]("set",i,n.sample),window[t]("event",i)),r=["chrome-extension"],u=["javascript:void(0)","javascript: void(0)"],r.some(function(t){return n.sourceFile.includes(t)})||u.some(function(t){return n.sample.includes(t)}))?!0:window.CSPEL.includes(n.sample)?!0:(window.CSPEL.push(n.sample),!1)};try{var ignErr=["ResizeObserver loop","Script error"],ignCSPErr=["unsafe-eval"],maxErr=3,ignoreCurrentError=function(n,t){return(ignErr.some(function(t){return n.includes(t)})||ignCSPErr.some(function(t){return n.includes(t)}))?ignCSPErr.some(function(t){return n.includes(t)})&&t.filename&&!t.filename.includes("chrome-extension://")?!1:(t!=null&&(typeof sj_sp!="undefined"&&sj_sp(t),typeof sj_pd!="undefined"&&sj_pd(t)),!0):!1},regexEsc=function(n){return n.replace(/([.?*+^$&[\]\\(){}|<>-])/g,"\\$1")},ignoreCSPLog=function(n){return["javascript:void(0)","javascript: void(0)","javascript:void()"].some(function(t){return n.sample.includes(t)})};window.jsErrorHandler=function(n){var f,p,h,rt,ut,u,e,ft,o,a,v,s;try{if(f='"noMessage"',p=(n.error||n).message||f,ignoreCurrentError(p,n))return;if(h=(window.ERC?window.ERC:0)+1,window.ERC=h,h>maxErr){logE("max errors reached");return}var c=n.error||n,w=n.filename,b=n.lineno,k=n.colno,d=n.extra,l=c.severity||"Error",g=c.message||f,i=c.stack,t='"'+escape(g.replace(/"/g,""))+'"',nt=new RegExp(regexEsc(location.href),"g"),tt=window.lirab,it=window.liraa,r=tt?" hint == ["+tt:"";if(r=r+(it?", "+it+")":r?"]":""),i){for(rt=/\(([^\)]+):[0-9]+:[0-9]+\)/g,u={};(ut=rt.exec(i))!==null;)e=ut[1],u[e]?u[e]++:u[e]=1;o=0;for(a in u)u[a]>1&&(v=regexEsc(a),ft=new RegExp(v,"g"),i=i.replace(ft,o),i+="#"+o+"="+v,o++);i=i.replace(nt,"self").replace(/"/g,"");t+=',"Stack":"'+(escape(i)+'"')}if(w?t+=',"Meta":"'+escape(w.replace(nt,"self"))+r+'"':r&&(t+=',"Meta":"'+r+'"'),b&&(t+=',"Line":"'+b+'"'),k&&(t+=',"Char":"'+k+'"'),d&&(t+=',"ExtraInfo":"'+d+'"'),g===f)if(l="Warning",t+=',"ObjectToString":"'+n.toString()+'"',JSON&&JSON.stringify)t+=',"JSON":"'+escape(JSON.stringify(n))+'"';else for(s in n)n.hasOwnProperty(s)&&(t+=',"'+s+'":"'+n[s]+'"');var et=(new Date).getTime(),ot='"T":"CI.'+l+'","FID":"CI","Name":"JS'+l+'","Text":'+t+"",st="<E><T>Event.ClientInst<\/T><IG>"+_G.IG+"<\/IG><TS>"+et+"<\/TS><D><![CDATA[[{"+ot+"}]]\]><\/D><\/E>",ht="<ClientInstRequest><Events>"+st+"<\/Events><STS>"+et+"<\/STS><\/ClientInstRequest>",y=new XMLHttpRequest;y.open("POST","/fd/ls/lsp.aspx?",!0);y.setRequestHeader("Content-Type","text/xml");y.send(ht);typeof sj_evt!="undefined"&&sj_evt.fire("ErrorInstrumentation",t)}catch(ct){logE("MetaJSError","Failed to execute error handler. "+ct.message)}};window.CSPEH=function(n){CSPIF(n)||logE("CSPViolation",n.sample,"Error")};window.addEventListener&&(window.addEventListener("error",window.jsErrorHandler,!1),window.addEventListener("unhandledrejection",window.jsErrorHandler,!1),window.addEventListener("securitypolicyviolation",window.CSPEH))}catch(e){logE("MetaJSError","Failed to bind error handler "+e.message)};
//]]></script></head><body><div class="hp_body"><div class="hpl hp_cont"><div class="sbox"><form action="/search" id="sb_form" class="sb_form"><input id="sb_form_q" class="sb_form_q" name="q"placeholder="" type="search" maxlength="1000" autocapitalize="off" autocomplete="off" spellcheck="false"title="输入搜索词" autofocus="autofocus" ) /><input id="sb_form_go" type="submit"title="搜索" name="search" value=""tabIndex="0" /><label for="sb_form_go" class="search icon tooltip" aria-label="搜索网页"><svg viewBox="0 0 25 25" enable-background="new 0 0 25 25"><path stroke="#007DAA" stroke-width="2.5" stroke-linecap="round" stroke-miterlimit="10" fill="none" d="M23.75 23.75l-9-9" /><circle stroke="#007DAA" stroke-width="2.5" stroke-linecap="round" stroke-miterlimit="10" cx="9" cy="9" r="7.75" fill="none" /><path fill="none" d="M25 25h-25v-25h25z" /></svg></label><input type="hidden" value="QBLH" name="form" /></form><a id="hpinsthk" aria-hidden="true" tabindex="-1" class="linkBtn" href="javascript:void(0)" h="ID=SERP,5067.1"><span></span></a></div></div><div class="hpl bottom_row"><div class="scroll_cont" id="scroll_cont"><footer class="footer no_mod " id="footer"><div class="footerbody "><span class="msft">© 2025 Microsoft</span><ul class="items"><li class="item"><a id="ICPLicense" href="https://dxzhgl.miit.gov.cn/dxxzsp/xkz/xkzgl/resource/qiyereport.jsp?num=caf04fa4-bd8a-4d9e-80b6-2aa1b86c1509&type=yreport" h="ID=SERP,5068.1">增值电信业务经营许可证:合字B2-20090007</a></li><li class="item"><a id="ICPFiling" href="https://beian.miit.gov.cn" h="ID=SERP,5069.1">京ICP备10036305号-7</a></li><li class="item"><a id="MMAIS" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802022657" h="ID=SERP,5070.1">京公网安备11010802022657号</a></li><li class="item"><a id="privacy" href="//go.microsoft.com/fwlink/?LinkId=521839" h="ID=SERP,5071.1">隐私与 Cookie</a></li><li class="item"><a id="legal" href="//go.microsoft.com/fwlink/?LinkID=246338" h="ID=SERP,5072.1">法律声明</a></li><li class="item"><a id="" href="//go.microsoft.com/fwlink/?linkid=868923" h="ID=SERP,5073.1">广告</a></li><li class="item"><a id="" href="//go.microsoft.com/fwlink/?LinkID=286759" h="ID=SERP,5074.1">关于我们的广告</a></li><li class="item"><a id="help" href="//support.microsoft.com/topic/82d20721-2d6f-4012-a13d-d1910ccf203f" h="ID=SERP,5075.1">帮助</a></li><li class="item"><a id="sb_feedback" href="#" h="ID=SERP,5076.1">反馈</a></li></ul></div></footer></div></div></div><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="https://r.bing.com/rs/6r/fU/jnc,nj/tlifxqsNyCzxIJnRwtQKuZToQQw.js?or=n"></script><script type="text/javascript" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=">//<![CDATA[
_G={Region:"CN",Lang:"zh-CN",ST:(typeof si_ST!=='undefined'?si_ST:new Date),Mkt:"zh-CN",RevIpCC:"cn",RTL:false,Ver:"02",IG:"FF4EF23145174E85AD474F918FF1DBA7",EventID:"677f654f27004b968703ecd7c0d95c04",V:"homepage",P:"SERP",DA:"MWHE01",CID:"38558B11726A671F048D9E7E73306660",SUIH:"WRx5BKryomwCvf4uGF4x7w",adc:"b_ad",EF:{bmasynctrigger:1,getslctspt:1,newtabsloppyclick:1,chevroncheckmousemove:1,sharepreview:1,shareoutimage:1,sharefixreadnum:1,sharepreviewthumbnailid:1,shareencodefix:1,chatskip2content:1,fablogfix:1},gpUrl:"\/fd\/ls\/GLinkPing.aspx?" }; _G.lsUrl="/fd/ls/l?IG="+_G.IG+"&CID="+_G.CID ;curUrl="https:\/\/cn.bing.com\/";_G.EnableCompression=false;_G.DirectLogFlight=0;function si_T(a){ if(document.images){_G.GPImg=new Image;_G.GPImg.src=_G.gpUrl+'IG='+_G.IG+'&CID='+_G.CID+'&'+a;}return true;}_G.BAT="0";_G.NTT="600000";_G.CTT="3000";_G.BNFN="Default";_G.LG="160";_G.FilterFlareInterval=5;;
//]]></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/ACby6guiuiyuEYRTFOH8no-JKCo.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/sTqO8BLDL3SMwm5-DmlL0eodCJk.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/PVEp6LmF7FGQF4_wW3Ri1trRPv4.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/oJtq_u9TBV7TshzGOx6yvnobEEU.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/PrUVzF4hlCEHR6XAp8AR6euT5OM.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/qN3rmGYj9Qsn6JmjzmYclpmfCHI.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/omjewb8RA_1ed-86jqIwN_f_ON8.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/9RU9Mo45ZvCytDGnLCWS0LulULU.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/svYzgo4yD9vzUlVytiD-v2lepRM.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="https://r.bing.com/rb/5U/jnc,nj/P2x0V8oF_ckBp8Ub5FlrxazIArQ.js?bu=BuAE5ATmBKMEzwTsBA&or=n"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/ICf9X-WMafiZOnS_3M9RpM8994E.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/nIt_N_kpXwbKZc4NbcR2zfSrv0E.gz.js"></script><script type="text/javascript" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=">//<![CDATA[
_w.rms.js({'A:rms:answers:Shared:BingCore.Bundle':'\/rp\/yvav1_QXkA6zP3dpoNUdncQpO8o.gz.js'},{'A:rms:answers:Feedback:FeedbackAccessibility':'\/rp\/peNl4yUB4P3PwDM4J7NWGzi8hKM.gz.js'},{'A:AppendHTML':'https:\/\/r.bing.com\/rs\/6r\/lz\/nj\/pxzfjFIjWTDQikh0A5aT_cguYyc.js?or=n'},{'A:AjaxLoad':'https:\/\/r.bing.com\/rs\/6r\/lN\/nj\/EmG-XMIMCcq8zmcVBBO7jkFERAE.js?or=n'},{'A:rms:answers:Feedback:FeedbackBootstrapBundle':'\/rp\/FfXzXdr8vxge7bE3bEZV_NYyNIE.gz.js'},{'A:0':0},{'A:rms:answers:BoxModel:Rules':'\/rp\/N0NZj2UoTgAcpHMO-3FYmE5C7G4.gz.js'},{'A:rms:answers:BoxModel:TriggerFirstChunk':'\/rp\/iuYNUHE3kZrz6Jrb0_Mf0yBFZN0.gz.js'},{'A:rms:answers:BoxModel:ViewportQueue':'\/rp\/8srl0LOx92Ew0yyAq2m2e33cq7I.gz.js'},{'A:rms:answers:BoxModel:LayoutQueue':'\/rp\/Mt62GUgrdySmO3Hz6WvsY51OVCM.gz.js'},{'A:rms:answers:BoxModel:EventQueue':'\/rp\/8AigLIxHhxH6NCSV3aSsPWpKiRs.gz.js'},{'A:rms:answers:BoxModel:Framework':'\/rp\/TLp8x4XeidQ-QJsLYxakNdnyojQ.gz.js'});;
//]]></script><div id="aRmsDefer"><script type="text/rms" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=">//<![CDATA[
Feedback.Bootstrap.InitializeFeedback({page:true},"sb_feedback",1,0,0);;
//]]></script></div></body></html>
--- PASS: TestReadFromHTTPResponseDemo (1.40s)
PASS
从内存的字节切片中读取
func ReadFromMemoryDemo() {data := []byte("hello io.Reader")reader := bytes.NewReader(data)buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}
测试方法
func TestReadFromMemoryDemo(t *testing.T) {ReadFromMemoryDemo()
}
输出结果
=== RUN TestReadFromMemoryDemo
h
e
l
l
oi
o
.
R
e
a
d
e
r
--- PASS: TestReadFromMemoryDemo (0.00s)
PASS
自定义io.Reader实现
// 自定义io.Reader实现
type myReader struct {data []bytepos int
}func (mr *myReader) Read(p []byte) (int, error) {n := copy(p, mr.data[mr.pos:])mr.pos += nif mr.pos >= len(mr.data) {return n, io.EOF}return n, nil
}func ReadFromMyReaderDemo() {data := []byte("hello io.Reader")reader := &myReader{data, 0}buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}
测试方法
func TestReadFromMyReaderDemo(t *testing.T) {ReadFromMyReaderDemo()
}
输出结果
=== RUN TestReadFromMyReaderDemo
h
e
l
l
oi
o
.
R
e
a
d
e
r
--- PASS: TestReadFromMyReaderDemo (0.00s)
PASS
源码
// reader_demo_2.go 文件
package reader_demoimport ("bufio""bytes""fmt""io""net/http""os""strings"
)func ReadFromStrDemo() {str := "hello world"reader := bufio.NewReader(strings.NewReader(str))buf := make([]byte, 2)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}func ReadFromFileDemo() {file, err := os.Open("test.txt")if err != nil {fmt.Println("Error opening file", err)return}defer file.Close()reader := bufio.NewReader(file)buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}func ReadFromHTTPResponseDemo() {resp, err := http.Get("https://www.bing.com")if err != nil {fmt.Println("Error", err)return}defer resp.Body.Close()if resp.StatusCode != http.StatusOK {fmt.Println("StatusCode", resp.StatusCode)return}body, err := io.ReadAll(resp.Body)if err != nil {fmt.Println("Error", err)return}fmt.Println(string(body))}func ReadFromMemoryDemo() {data := []byte("hello io.Reader")reader := bytes.NewReader(data)buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}// 自定义io.Reader实现
type myReader struct {data []bytepos int
}func (mr *myReader) Read(p []byte) (int, error) {n := copy(p, mr.data[mr.pos:])mr.pos += nif mr.pos >= len(mr.data) {return n, io.EOF}return n, nil
}func ReadFromMyReaderDemo() {data := []byte("hello io.Reader")reader := &myReader{data, 0}buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}
// readder_demo_2_test.go 文件
package reader_demoimport "testing"func TestReadFromStrDemo(t *testing.T) {ReadFromStrDemo()
}func TestReadFromFileDemo(t *testing.T) {ReadFromFileDemo()
}func TestReadFromHTTPResponseDemo(t *testing.T) {ReadFromHTTPResponseDemo()
}func TestReadFromMemoryDemo(t *testing.T) {ReadFromMemoryDemo()
}func TestReadFromMyReaderDemo(t *testing.T) {ReadFromMyReaderDemo()
}
相关文章:
Golang学习笔记_22——Reader示例
Golang学习笔记_19——Stringer Golang学习笔记_20——error Golang学习笔记_21——Reader 文章目录 io.Reader 示例从字符串中读取从文件中读取从HTTP响应中读取从内存的字节切片中读取自定义io.Reader实现 源码 io.Reader 示例 从字符串中读取 func ReadFromStrDemo() {str…...
【2024年华为OD机试】(A卷,100分)- 猜字谜(Java JS PythonC/C++)
一、问题描述 小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如 nesw,玩家需要猜出谜底库中正确的单词。猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序…...
iostat命令详解
iostat 命令是 I/O statistics(输入/输出统计)的缩写,用来报告系统的 CPU 统计信息和块设备及其分区的 IO 统计信息。iostat 是 sysstat 工具集的一个工具,在 Ubuntu 系统中默认是不带 iostat 命令的,需要自行安装: $ sudo apt in…...
Linux:操作系统简介
前言: 在本片文章,小编将带大家理解冯诺依曼体系以及简单理解操作喜欢,并且本篇文章将围绕什么以及为什么两个话题进行展开说明。 冯诺依曼体系: 是什么: 冯诺依曼体系(Von Neumann architectureÿ…...
企业级信息系统开发讲课笔记4.12 Spring Boot默认缓存管理
文章目录 1. Spring Boot默认缓存管理2. Spring的缓存机制2.1 缓存机制概述2.2 缓存接口和缓存管理接口3. 声明式缓存注解3.1 @EnableCaching注解3.2 @Cacheable注解3.2.1 value/cacheNames属性3.2.2 key属性3.2.3 keyGenerator属性3.2.4 cacheManager/cacheResolver属性3.2.5 …...
2025制定一个高级java开发路线:分布式系统、多线程编程、高并发经验
1-熟悉分布式系统的设计和应用,熟悉分布式、缓存、消息、负载均衡等机制和实现者优先。 2-熟悉多线程编程,具备高并发经验优先。 技术学习规划:熟悉分布式系统和高并发技术 以下是针对目标要求的系统性学习规划,分为 阶段目标 和…...
20250110_ PyTorch中的张量操作
文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理: 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来,具体地是…...
hadoop-yarn常用命令
一、YARN命令介绍 1. YARN命令简介 YARN提供了一组命令行工具,用于管理和监控YARN应用程序和集群。 2. yarn application命令 (1) yarn application命令的基本语法 yarn application命令的基本语法如下: yarn application [genericOptions] [comma…...
LabVIEW滤波器功能
程序通过LabVIEW生成一个带噪声的正弦波信号,并利用滤波器对其进行信号提取。具体来说,它生成一个正弦波信号,叠加高频噪声后形成带噪信号,再通过低通滤波器滤除噪声,提取原始正弦波信号。整个过程展示了信号生成、噪声…...
【Unity3D日常开发】Unity3D中打开Window文件对话框打开文件(PC版)
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 这篇文章继续讲如何使用Unity3D打开Window文…...
ros2笔记-6.2 使用urdf创建机器人模型
本节主要跟着小鱼老师的视频操作,不同的仿真平台有不同的建模语言,但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…...
【centos】校时服务创建-频率修改
在 NTP 配置中,校时频率通常是由 NTP 协议自动管理的,NTP 会根据网络延迟和时间偏差动态调整校时频率。不过,您可以通过配置文件中的一些参数来影响 NTP 的行为。 如果想要更改 NTP 的校时频率,可以考虑以下几个方面:…...
J.U.C(1)
目录 JUC(一)一:AQS二:reentrantlock原理1:加锁:2:解锁3:可重入锁原理4:可打断原理5:公平锁原理6:条件变量 三:读写锁(ree…...
计算机网络之---静态路由与动态路由
静态路由 静态路由是由网络管理员手动配置并固定的路由方式。路由器通过静态配置的路由条目来转发数据包,而不会自动调整。它不依赖于任何路由协议。 特点: 手动配置:网络管理员需要手动在路由器中配置每条静态路由。不自动更新:…...
Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书
文章目录 前言一、资源准备1. 下载对应源码2.安装编译工具3.安装并设置golang 二、修改证书有效期1.修改证书有效期2.修改 CA 证书有效期 三、编译kubeadm四、使用新kubeadm方式1.当部署新集群时,使用该kubeadm进行初始化2.替换现有集群kubeadm操作 前言 kubeadm 默认证书为一…...
C++----STL(string)
引言:STL简介 什么是STL STL(standard template libaray-标准模板库): 是 C标准库的重要组成部分(注意:STL只是C标准库里的一部分,cin和cout也是属于C标准库的),不仅是一个可复用的组件库&…...
利用 Java 爬虫从 yiwugo 根据 ID 获取商品详情
在当今数字化时代,数据是商业决策的关键。对于从事国际贸易的商家来说,精准获取商品的详细信息至关重要。yiwugo 是一个知名的国际贸易平台,拥有海量的商品数据。通过 Java 爬虫技术,我们可以高效地从 yiwugo 根据商品 ID 获取详细…...
vue2修改表单只提交被修改的数据的字段传给后端接口
效果: 步骤一、 vue2修改表单提交的时候,只将修改的数据的字段传给后端接口,没有修改得数据不传参给接口。 在 data 对象中添加一个新的属性,用于存储初始表单数据的副本,与当前表单数据进行比较,找出哪些…...
Flink类加载机制详解
1. 总览 在运行Flink应用时,它会加载各种类,另外我们用户代码也会引入依赖,由于他们依赖版本以及加载顺序等不同,就可能会导致冲突,所以很要必要了解Flink是如何加载类的。 根据加载的来源的不同,我们可以将类分为三种: Java Classpath:Java类路径下,这是Java通用的…...
ClickHouse大数据准实时更新
一、问题背景 最近有一个项目需求,需要对日活跃的3万辆车的定位数据进行分析,并支持查询和统计分析结果。每辆车每天产生1条分析结果数据,要求能够查询过去一年内的所有分析结果。因此,每月需要处理约90万条记录,一年大…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...
