chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用io.Reader和io.Writer接口在程序中實(shí)現(xiàn)流式IO

馬哥Linux運(yùn)維 ? 來源:思否開發(fā)者社區(qū) ? 作者:ronniesong ? 2021-07-29 16:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Go 語言標(biāo)準(zhǔn)庫 io 包內(nèi)有一些常用接口和方法,本文配合圖片和實(shí)際代碼,詳細(xì)介紹了 io 包。

前言

在 Go 中,輸入和輸出操作是使用原語實(shí)現(xiàn)的,這些原語將數(shù)據(jù)模擬成可讀的或可寫的字節(jié)流。

為此,Go 的 io 包提供了 io.Reader 和 io.Writer 接口,分別用于數(shù)據(jù)的輸入和輸出

Go 官方提供了一些 API,支持對(duì)內(nèi)存結(jié)構(gòu),文件,網(wǎng)絡(luò)連接等資源進(jìn)行操作

本文重點(diǎn)介紹如何實(shí)現(xiàn)標(biāo)準(zhǔn)庫中 io.Reader 和 io.Writer 兩個(gè)接口,來完成流式傳輸數(shù)據(jù)。

io.Reader

io.Reader 表示一個(gè)讀取器,它將數(shù)據(jù)從某個(gè)資源讀取到傳輸緩沖區(qū)。在緩沖區(qū)中,數(shù)據(jù)可以被流式傳輸和使用。

對(duì)于要用作讀取器的類型,它必須實(shí)現(xiàn) io.Reader 接口的唯一一個(gè)方法 Read(p []byte)。

換句話說,只要實(shí)現(xiàn)了 Read(p []byte) ,那它就是一個(gè)讀取器。

type Reader interface {

Read(p []byte) (n int, err error)

}

Read() 方法有兩個(gè)返回值,一個(gè)是讀取到的字節(jié)數(shù),一個(gè)是發(fā)生錯(cuò)誤時(shí)的錯(cuò)誤。

同時(shí),如果資源內(nèi)容已全部讀取完畢,應(yīng)該返回 io.EOF 錯(cuò)誤。

使用 Reader

利用 Reader 可以很容易地進(jìn)行流式數(shù)據(jù)傳輸。Reader 方法內(nèi)部是被循環(huán)調(diào)用的,每次迭代,它會(huì)從數(shù)據(jù)源讀取一塊數(shù)據(jù)放入緩沖區(qū) p (即 Read 的參數(shù) p)中,直到返回 io.EOF 錯(cuò)誤時(shí)停止。

下面是一個(gè)簡(jiǎn)單的例子,通過 string.NewReader(string) 創(chuàng)建一個(gè)字符串讀取器,然后流式地按字節(jié)讀?。?/p>

func main() {

reader := strings.NewReader(“Clear is better than clever”)

p := make([]byte, 4)

for {

n, err := reader.Read(p)

if err != nil{

if err == io.EOF {

fmt.Println(“EOF:”, n)

break

}

fmt.Println(err)

os.Exit(1)

}

fmt.Println(n, string(p[:n]))

}

}

輸出打印的內(nèi)容:

4 Clea

4 r is

4 bet

4 ter

4 than

4 cle

3 ver

EOF: 0

可以看到,最后一次返回的 n 值有可能小于緩沖區(qū)大小。

自己實(shí)現(xiàn)一個(gè) Reader

上一節(jié)是使用標(biāo)準(zhǔn)庫中的 io.Reader 讀取器實(shí)現(xiàn)的。

現(xiàn)在,讓我們看看如何自己實(shí)現(xiàn)一個(gè)。它的功能是從流中過濾掉非字母字符。

type alphaReader struct {

// 資源

src string

// 當(dāng)前讀取到的位置

cur int

}

// 創(chuàng)建一個(gè)實(shí)例func newAlphaReader(src string) *alphaReader {

return &alphaReader{src: src}

}

// 過濾函數(shù)func alpha(r byte) byte {

if (r 》= ‘A’ && r 《= ‘Z’) || (r 》= ‘a(chǎn)’ && r 《= ‘z’) {

return r

}

return 0

}

// Read 方法func (a *alphaReader) Read(p []byte) (int, error) {

// 當(dāng)前位置 》= 字符串長(zhǎng)度 說明已經(jīng)讀取到結(jié)尾 返回 EOF

if a.cur 》= len(a.src) {

return 0, io.EOF

}

// x 是剩余未讀取的長(zhǎng)度

x := len(a.src) - a.cur

n, bound := 0, 0

if x 》= len(p) {

// 剩余長(zhǎng)度超過緩沖區(qū)大小,說明本次可完全填滿緩沖區(qū)

bound = len(p)

} else if x 《 len(p) {

// 剩余長(zhǎng)度小于緩沖區(qū)大小,使用剩余長(zhǎng)度輸出,緩沖區(qū)不補(bǔ)滿

bound = x

}

buf := make([]byte, bound)

for n 《 bound {

// 每次讀取一個(gè)字節(jié),執(zhí)行過濾函數(shù)

if char := alpha(a.src[a.cur]); char != 0 {

buf[n] = char

}

n++

a.cur++

}

// 將處理后得到的 buf 內(nèi)容復(fù)制到 p 中

copy(p, buf)

return n, nil

}

func main() {

reader := newAlphaReader(“Hello! It‘s 9am, where is the sun?”)

p := make([]byte, 4)

for {

n, err := reader.Read(p)

if err == io.EOF {

break

}

fmt.Print(string(p[:n]))

}

fmt.Println()

}

輸出打印的內(nèi)容:

HelloItsamwhereisthesun

組合多個(gè) Reader,目的是重用和屏蔽下層實(shí)現(xiàn)的復(fù)雜度

標(biāo)準(zhǔn)庫已經(jīng)實(shí)現(xiàn)了許多 Reader。

使用一個(gè) Reader 作為另一個(gè) Reader 的實(shí)現(xiàn)是一種常見的用法。

這樣做可以讓一個(gè) Reader 重用另一個(gè) Reader 的邏輯,下面展示通過更新 alphaReader 以接受 io.Reader 作為其來源。

type alphaReader struct {

// alphaReader 里組合了標(biāo)準(zhǔn)庫的 io.Reader

reader io.Reader

}

func newAlphaReader(reader io.Reader) *alphaReader {

return &alphaReader{reader: reader}

}

func alpha(r byte) byte {

if (r 》= ’A‘ && r 《= ’Z‘) || (r 》= ’a‘ && r 《= ’z‘) {

return r

}

return 0

}

func (a *alphaReader) Read(p []byte) (int, error) {

// 這行代碼調(diào)用的就是 io.Reader

n, err := a.reader.Read(p)

if err != nil {

return n, err

}

buf := make([]byte, n)

for i := 0; i 《 n; i++ {

if char := alpha(p[i]); char != 0 {

buf[i] = char

}

}

copy(p, buf)

return n, nil

}

func main() {

// 使用實(shí)現(xiàn)了標(biāo)準(zhǔn)庫 io.Reader 接口的 strings.Reader 作為實(shí)現(xiàn)

reader := newAlphaReader(strings.NewReader(“Hello! It’s 9am, where is the sun?”))

p := make([]byte, 4)

for {

n, err := reader.Read(p)

if err == io.EOF {

break

}

fmt.Print(string(p[:n]))

}

fmt.Println()

}

這樣做的另一個(gè)優(yōu)點(diǎn)是 alphaReader 能夠從任何 Reader 實(shí)現(xiàn)中讀取。

例如,以下代碼展示了 alphaReader 如何與 os.File 結(jié)合以過濾掉文件中的非字母字符:

func main() {

// file 也實(shí)現(xiàn)了 io.Reader

file, err := os.Open(“。/alpha_reader3.go”)

if err != nil {

fmt.Println(err)

os.Exit(1)

}

defer file.Close()

// 任何實(shí)現(xiàn)了 io.Reader 的類型都可以傳入 newAlphaReader

// 至于具體如何讀取文件,那是標(biāo)準(zhǔn)庫已經(jīng)實(shí)現(xiàn)了的,我們不用再做一遍,達(dá)到了重用的目的

reader := newAlphaReader(file)

p := make([]byte, 4)

for {

n, err := reader.Read(p)

if err == io.EOF {

break

}

fmt.Print(string(p[:n]))

}

fmt.Println()

}

io.Writer

io.Writer 表示一個(gè)編寫器,它從緩沖區(qū)讀取數(shù)據(jù),并將數(shù)據(jù)寫入目標(biāo)資源。

對(duì)于要用作編寫器的類型,必須實(shí)現(xiàn) io.Writer 接口的唯一一個(gè)方法 Write(p []byte)

同樣,只要實(shí)現(xiàn)了 Write(p []byte) ,那它就是一個(gè)編寫器。

type Writer interface {

Write(p []byte) (n int, err error)

}

Write() 方法有兩個(gè)返回值,一個(gè)是寫入到目標(biāo)資源的字節(jié)數(shù),一個(gè)是發(fā)生錯(cuò)誤時(shí)的錯(cuò)誤。

使用 Writer

標(biāo)準(zhǔn)庫提供了許多已經(jīng)實(shí)現(xiàn)了 io.Writer 的類型。

下面是一個(gè)簡(jiǎn)單的例子,它使用 bytes.Buffer 類型作為 io.Writer 將數(shù)據(jù)寫入內(nèi)存緩沖區(qū)。

func main() {

proverbs := []string{

“Channels orchestrate mutexes serialize”,

“Cgo is not Go”,

“Errors are values”,

“Don‘t panic”,

}

var writer bytes.Buffer

for _, p := range proverbs {

n, err := writer.Write([]byte(p))

if err != nil {

fmt.Println(err)

os.Exit(1)

}

if n != len(p) {

fmt.Println(“failed to write data”)

os.Exit(1)

}

}

fmt.Println(writer.String())

}

輸出打印的內(nèi)容:

Channels orchestrate mutexes serializeCgo is not GoErrors are valuesDon’t panic

自己實(shí)現(xiàn)一個(gè) Writer

下面我們來實(shí)現(xiàn)一個(gè)名為 chanWriter 的自定義 io.Writer ,它將其內(nèi)容作為字節(jié)序列寫入 channel 。

type chanWriter struct {

// ch 實(shí)際上就是目標(biāo)資源

ch chan byte

}

func newChanWriter() *chanWriter {

return &chanWriter{make(chan byte, 1024)}

}

func (w *chanWriter) Chan() 《-chan byte {

return w.ch

}

func (w *chanWriter) Write(p []byte) (int, error) {

n := 0

// 遍歷輸入數(shù)據(jù),按字節(jié)寫入目標(biāo)資源

for _, b := range p {

w.ch 《- b

n++

}

return n, nil

}

func (w *chanWriter) Close() error {

close(w.ch)

return nil

}

func main() {

writer := newChanWriter()

go func() {

defer writer.Close()

writer.Write([]byte(“Stream ”))

writer.Write([]byte(“me!”))

}()

for c := range writer.Chan() {

fmt.Printf(“%c”, c)

}

fmt.Println()

}

要使用這個(gè) Writer,只需在函數(shù) main() 中調(diào)用 writer.Write()(在單獨(dú)的 goroutine 中)。

因?yàn)?chanWriter 還實(shí)現(xiàn)了接口 io.Closer ,所以調(diào)用方法 writer.Close() 來正確地關(guān)閉 channel,以避免發(fā)生泄漏和死鎖。

io 包里其他有用的類型和方法

如前所述,Go 標(biāo)準(zhǔn)庫附帶了許多有用的功能和類型,讓我們可以輕松使用流式 io。

os.File

類型 os.File 表示本地系統(tǒng)上的文件。它實(shí)現(xiàn)了 io.Reader 和 io.Writer ,因此可以在任何 io 上下文中使用。

例如,下面的例子展示如何將連續(xù)的字符串切片直接寫入文件:

func main() {

proverbs := []string{

“Channels orchestrate mutexes serialize

”,

“Cgo is not Go

”,

“Errors are values

”,

“Don‘t panic

”,

}

file, err := os.Create(“。/proverbs.txt”)

if err != nil {

fmt.Println(err)

os.Exit(1)

}

defer file.Close()

for _, p := range proverbs {

// file 類型實(shí)現(xiàn)了 io.Writer

n, err := file.Write([]byte(p))

if err != nil {

fmt.Println(err)

os.Exit(1)

}

if n != len(p) {

fmt.Println(“failed to write data”)

os.Exit(1)

}

}

fmt.Println(“file write done”)

}

同時(shí),io.File 也可以用作讀取器來從本地文件系統(tǒng)讀取文件的內(nèi)容。

例如,下面的例子展示了如何讀取文件并打印其內(nèi)容:

func main() {

file, err := os.Open(“。/proverbs.txt”)

if err != nil {

fmt.Println(err)

os.Exit(1)

}

defer file.Close()

p := make([]byte, 4)

for {

n, err := file.Read(p)

if err == io.EOF {

break

}

fmt.Print(string(p[:n]))

}

}

標(biāo)準(zhǔn)輸入、輸出和錯(cuò)誤

os 包有三個(gè)可用變量 os.Stdout ,os.Stdin 和 os.Stderr ,它們的類型為 *os.File,分別代表 系統(tǒng)標(biāo)準(zhǔn)輸入,系統(tǒng)標(biāo)準(zhǔn)輸出 和 系統(tǒng)標(biāo)準(zhǔn)錯(cuò)誤 的文件句柄。

例如,下面的代碼直接打印到標(biāo)準(zhǔn)輸出:

func main() {

proverbs := []string{

“Channels orchestrate mutexes serialize

”,

“Cgo is not Go

”,

“Errors are values

”,

“Don’t panic

”,

}

for _, p := range proverbs {

// 因?yàn)?os.Stdout 也實(shí)現(xiàn)了 io.Writer

n, err := os.Stdout.Write([]byte(p))

if err != nil {

fmt.Println(err)

os.Exit(1)

}

if n != len(p) {

fmt.Println(“failed to write data”)

os.Exit(1)

}

}

}

io.Copy()

io.Copy() 可以輕松地將數(shù)據(jù)從一個(gè) Reader 拷貝到另一個(gè) Writer。

它抽象出 for 循環(huán)模式(我們上面已經(jīng)實(shí)現(xiàn)了)并正確處理 io.EOF 和 字節(jié)計(jì)數(shù)。

下面是我們之前實(shí)現(xiàn)的簡(jiǎn)化版本:

func main() {

proverbs := new(bytes.Buffer)

proverbs.WriteString(“Channels orchestrate mutexes serialize

”)

proverbs.WriteString(“Cgo is not Go

”)

proverbs.WriteString(“Errors are values

”)

proverbs.WriteString(“Don‘t panic

”)

file, err := os.Create(“。/proverbs.txt”)

if err != nil {

fmt.Println(err)

os.Exit(1)

}

defer file.Close()

// io.Copy 完成了從 proverbs 讀取數(shù)據(jù)并寫入 file 的流程

if _, err := io.Copy(file, proverbs); err != nil {

fmt.Println(err)

os.Exit(1)

}

fmt.Println(“file created”)

}

那么,我們也可以使用 io.Copy() 函數(shù)重寫從文件讀取并打印到標(biāo)準(zhǔn)輸出的先前程序,如下所示:

func main() {

file, err := os.Open(“。/proverbs.txt”)

if err != nil {

fmt.Println(err)

os.Exit(1)

}

defer file.Close()

if _, err := io.Copy(os.Stdout, file); err != nil {

fmt.Println(err)

os.Exit(1)

}

}

io.WriteString()

此函數(shù)讓我們方便地將字符串類型寫入一個(gè) Writer:

func main() {

file, err := os.Create(“。/magic_msg.txt”)

if err != nil {

fmt.Println(err)

os.Exit(1)

}

defer file.Close()

if _, err := io.WriteString(file, “Go is fun!”); err != nil {

fmt.Println(err)

os.Exit(1)

}

}

使用管道的 Writer 和 Reader

類型 io.PipeWriter 和 io.PipeReader 在內(nèi)存管道中模擬 io 操作。

數(shù)據(jù)被寫入管道的一端,并使用單獨(dú)的 goroutine 在管道的另一端讀取。

下面使用 io.Pipe() 創(chuàng)建管道的 reader 和 writer,然后將數(shù)據(jù)從 proverbs 緩沖區(qū)復(fù)制到io.Stdout :

func main() {

proverbs := new(bytes.Buffer)

proverbs.WriteString(“Channels orchestrate mutexes serialize

”)

proverbs.WriteString(“Cgo is not Go

”)

proverbs.WriteString(“Errors are values

”)

proverbs.WriteString(“Don’t panic

”)

piper, pipew := io.Pipe()

// 將 proverbs 寫入 pipew 這一端

go func() {

defer pipew.Close()

io.Copy(pipew, proverbs)

}()

// 從另一端 piper 中讀取數(shù)據(jù)并拷貝到標(biāo)準(zhǔn)輸出

io.Copy(os.Stdout, piper)

piper.Close()

}

緩沖區(qū) io

標(biāo)準(zhǔn)庫中 bufio 包支持 緩沖區(qū) io 操作,可以輕松處理文本內(nèi)容。

例如,以下程序逐行讀取文件的內(nèi)容,并以值 ‘ ’ 分隔:

func main() {

file, err := os.Open(“。/planets.txt”)

if err != nil {

fmt.Println(err)

os.Exit(1)

}

defer file.Close()

reader := bufio.NewReader(file)

for {

line, err := reader.ReadString(‘

’)

if err != nil {

if err == io.EOF {

break

} else {

fmt.Println(err)

os.Exit(1)

}

}

fmt.Print(line)

}

}

ioutil

io 包下面的一個(gè)子包 utilio 封裝了一些非常方便的功能

例如,下面使用函數(shù) ReadFile 將文件內(nèi)容加載到 []byte 中。

package main

import (

“io/ioutil”

。。。

func main() {

bytes, err := ioutil.ReadFile(“。/planets.txt”)

if err != nil {

fmt.Println(err)

os.Exit(1)

}

fmt.Printf(“%s”, bytes)

}

總結(jié)

本文介紹了如何使用 io.Reader 和 io.Writer 接口在程序中實(shí)現(xiàn)流式 IO。閱讀本文后,您應(yīng)該能夠了解如何使用 io 包來實(shí)現(xiàn) 流式傳輸 IO 數(shù)據(jù)的程序。

其中有一些例子,展示了如何創(chuàng)建自己的類型,并實(shí)現(xiàn)io.Reader 和 io.Writer 。

這是一個(gè)簡(jiǎn)單介紹性質(zhì)的文章,沒有擴(kuò)展開來講。

例如,我們沒有深入文件 IO,緩沖 IO,網(wǎng)絡(luò) IO 或格式化 IO(保存用于將來的寫入)。

我希望這篇文章可以讓你了解 Go 語言中 流式 IO 的常見用法是什么。

謝謝!

轉(zhuǎn)自:ronniesong

segmentfault.com/a/1190000015591319

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Writer
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    7583

原文標(biāo)題:Go 中 io 包的使用方法

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    超實(shí)用!一頁搞定威綸通IO顯示

    狀態(tài)呢?本期將分享一個(gè)超實(shí)用的觸摸屏技巧,實(shí)現(xiàn)這一目標(biāo)。 1.首先需要先將IO列表按照順序排序,如果IO列表是混亂的,無法使用這個(gè)方式去制作IO界面。 2.建立HMI觸摸屏
    的頭像 發(fā)表于 11-12 15:42 ?260次閱讀
    超實(shí)用!一頁搞定威綸通<b class='flag-5'>IO</b>顯示

    遠(yuǎn)程IO模塊與PLC的通信如何實(shí)現(xiàn)

    現(xiàn)代工業(yè)自動(dòng)化系統(tǒng),遠(yuǎn)程IO模塊作為延伸控制系統(tǒng)觸角的關(guān)鍵設(shè)備,正發(fā)揮著越來越重要的作用。 遠(yuǎn)程IO模塊是現(xiàn)代工業(yè)自動(dòng)化系統(tǒng)的關(guān)鍵組件,它作為PLC的遠(yuǎn)程眼睛、耳朵和手腳,將現(xiàn)場(chǎng)傳
    的頭像 發(fā)表于 10-28 13:42 ?293次閱讀
    遠(yuǎn)程<b class='flag-5'>IO</b>模塊與PLC的通信如何<b class='flag-5'>實(shí)現(xiàn)</b>?

    遠(yuǎn)程IO不就是分布式IO?其實(shí)很多人都理解錯(cuò)了

    一、引言 工業(yè)自動(dòng)化和控制系統(tǒng),分布式io和遠(yuǎn)程io作為兩種常見的IO技術(shù),各自具有獨(dú)特的特點(diǎn)和優(yōu)勢(shì),以下對(duì)遠(yuǎn)程
    的頭像 發(fā)表于 09-28 11:06 ?396次閱讀
    遠(yuǎn)程<b class='flag-5'>IO</b>不就是分布式<b class='flag-5'>IO</b>?其實(shí)很多人都理解錯(cuò)了

    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(二):IO-Link通信技術(shù)概述

    and actuators),可以理解為一個(gè)是學(xué)名,一個(gè)是別名。IEC 61131-9標(biāo)準(zhǔn)的正式名稱就是SDCI,但我們通常叫的IO-Link,其實(shí)是一個(gè)注冊(cè)商標(biāo),一個(gè)市場(chǎng)化的名稱。 那為啥叫做SDCI呢?? S即Sing
    的頭像 發(fā)表于 09-25 19:25 ?355次閱讀
    睿遠(yuǎn)研究院丨<b class='flag-5'>IO</b>-Link規(guī)范解讀(二):<b class='flag-5'>IO</b>-Link通信技術(shù)概述

    GraniStudio:IO初始化以及IO資源配置例程

    IO資源配置.gsp文件,點(diǎn)擊打開,完成導(dǎo)入。 2.功能說明 實(shí)現(xiàn)連接格拉尼控制器IO塊以及配置輸入輸出IO點(diǎn)。 2.1通過初始化IO算子連
    的頭像 發(fā)表于 08-22 17:34 ?731次閱讀
    GraniStudio:<b class='flag-5'>IO</b>初始化以及<b class='flag-5'>IO</b>資源配置例程

    GraniStudio:IO寫入例程

    說明 實(shí)現(xiàn)輸出IO控制以及讀取。 2.1通過初始化IO算子連接格拉尼控制器IO塊,導(dǎo)入工程自動(dòng)進(jìn)行連接。 2.2 通過IO配置算子輸出配置的
    的頭像 發(fā)表于 08-22 16:47 ?593次閱讀
    GraniStudio:<b class='flag-5'>IO</b>寫入例程

    干貨分享 | TSMaster IO功能使用指南—基于同星帶IO設(shè)備的配置與操作步驟

    用于處理連續(xù)型信號(hào)的輸入和輸出,它們可以接收和發(fā)送模擬信號(hào),通常用于測(cè)量和控制溫度、壓力、電壓等連續(xù)性參數(shù)。本文主要介紹同星帶IO的設(shè)備以及TSMaster軟件
    的頭像 發(fā)表于 08-09 20:04 ?685次閱讀
    干貨分享 | TSMaster <b class='flag-5'>IO</b>功能使用指南—基于同星帶<b class='flag-5'>IO</b>設(shè)備的配置與操作步驟

    一文詳解Advanced IO wizard異步模式

    7nm Versal系列相對(duì)于16nm Ultrascale plus系列,IO做了升級(jí),U+系列的HPIOVersal升級(jí)為XPIO。Versal系列每一個(gè)XPIO bank包含54個(gè)IO管腳
    的頭像 發(fā)表于 07-11 09:52 ?1179次閱讀
    一文詳解Advanced <b class='flag-5'>IO</b> wizard異步模式

    Analog Devices / Maxim Integrated MAXREFDES177 IO-Link通用模擬IO特性/框圖

    Analog Devices MAXREFDES177 IO-Link通用模擬IO是一款完備的IO-Link?通用模擬輸入-輸出 (IO) 參考設(shè)計(jì),采用內(nèi)置集成保護(hù)功能的MAX225
    的頭像 發(fā)表于 06-30 09:30 ?530次閱讀
    Analog Devices / Maxim Integrated MAXREFDES177 <b class='flag-5'>IO</b>-Link通用模擬<b class='flag-5'>IO</b>特性/框圖

    虹科直播回放 | IO-Link技術(shù)概述與虹科IO-Link OEM

    虹科「一站式通訊解決方案」系列直播第1期圓滿落幕!本期主題為「IO-Link技術(shù)概述與虹科IO-LinkOEM」感謝各位朋友的熱情參與!本期直播虹科專業(yè)講師瞿工帶大家走進(jìn)工業(yè)4.0深度解讀了
    的頭像 發(fā)表于 02-19 17:34 ?1125次閱讀
    虹科直播回放 | <b class='flag-5'>IO</b>-Link技術(shù)概述與虹科<b class='flag-5'>IO</b>-Link OEM

    Profinet IO通信故障原因及解決辦法

    Profinet IO(Industrial Ethernet for Automation)作為一種高性能的工業(yè)以太網(wǎng)通信協(xié)議,廣泛應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域。然而,實(shí)際應(yīng)用,Profinet
    的頭像 發(fā)表于 02-03 14:50 ?3071次閱讀

    IO-Link接口的功能和特點(diǎn)

    和自動(dòng)化系統(tǒng)的整體效率。本文將深入探討IO-Link接口的定義、功能、應(yīng)用場(chǎng)景以及其工業(yè)自動(dòng)化的重要性。
    的頭像 發(fā)表于 02-02 15:50 ?2057次閱讀

    遠(yuǎn)程IO模塊怎么用

    工業(yè)自動(dòng)化和物聯(lián)網(wǎng)(IoT)領(lǐng)域,遠(yuǎn)程IO(輸入/輸出)采集模塊扮演著至關(guān)重要的角色,允許系統(tǒng)遠(yuǎn)程監(jiān)控和控制各種設(shè)備狀態(tài),從而實(shí)現(xiàn)更高效、靈活的數(shù)據(jù)采集和控制流程。 遠(yuǎn)程IO模塊是一
    的頭像 發(fā)表于 01-21 16:55 ?1125次閱讀

    λ-IO:存儲(chǔ)計(jì)算下的IO棧設(shè)計(jì)

    動(dòng)機(jī)和背景? ? 存儲(chǔ)計(jì)算存儲(chǔ)資源的充分利用。IO棧是管理存儲(chǔ)器的的基本組件,包括設(shè)備驅(qū)動(dòng)、塊接口層、文件系統(tǒng),目前一些用戶空間IO庫(如SPDK)有效降低了延遲,但是io棧仍然不可或
    的頭像 發(fā)表于 12-02 10:35 ?942次閱讀
    λ-<b class='flag-5'>IO</b>:存儲(chǔ)計(jì)算下的<b class='flag-5'>IO</b>棧設(shè)計(jì)

    DAC3161應(yīng)用若要使用IO TEST該怎么用?

    DAC3161應(yīng)用若要使用IO TEST該怎么用?我現(xiàn)在能輸出正常波形,但溫度變化過大后,可能會(huì)有FPGA和DAC數(shù)據(jù)接口時(shí)序不匹配問題。調(diào)整寄存器延時(shí)后又能恢復(fù)正常。所以想用D
    發(fā)表于 12-02 08:29