Go入坑 bufio使用

来源:https://www.cnblogs.com/zlnfcl/archive/2022/10/15/16794384.html
-Advertisement-
Play Games

1.os.walk 返回指定路徑下所有文件和子文件夾中所有文件列表 其中文件夾下路徑如下: import os def file_name_walk(file_dir): for root, dirs, files in os.walk(file_dir): print("root", root) ...


bufio包實現了有緩衝的I/O,它封裝了一個io.Reader或io.Write介面對象,創建一個實現實現了該介面,同時提供緩衝和一些文本I/O的幫助函數.

 

簡單的說就是,把文件讀取進緩衝(記憶體)之後再讀取的時候就可以避免文件系統的io 從而提高速度。同理,在進行寫操作時,先把文件寫入緩衝(記憶體),然後由緩衝寫入文件系統。看完以上解釋有人可能會表示困惑了,直接把 內容->文件 和 內容->緩衝->文件相比, 緩衝區好像沒有起到作用嘛。其實緩衝區的設計是為了存儲多次的寫入,最後一口氣把緩衝區內容寫入文件。下麵會詳細解釋

bufio 封裝了io.Reader或io.Writer介面對象,並創建另一個也實現了該介面的對象

io.Reader或io.Writer 介面實現read() 和 write() 方法,對於實現這個介面的對象都是可以使用這兩個方法的

以下是bufio的簡單使用:

func main() {
    fileName := "C:\\Users\\fcl18\\Desktop\\發言.txt"

    file, err := os.Open(fileName)
    if err != nil {
        fmt.Println("err", err)
        return
    }
    defer file.Close()

    // b1 := bufio.NewReader(file)
    //1,Read() 高效讀取
    // p := make([]byte, 1024)
    // n1, err1 := b1.Read(p)
    // if err1 != nil {
    //     fmt.Println("err", err1)
    //     return
    // }
    // fmt.Println(n1)
    // fmt.Println(string(p[:n1]))

    //2, ReadLine  比較低級
    // data, flag, err := b1.ReadLine()
    // fmt.Println(data)
    // fmt.Println(flag)
    // fmt.Println(err)
    // fmt.Println(string(data))

    //3, ReadString
    // str, err := b1.ReadString('\n') //讀取一行
    // fmt.Println(err)
    // fmt.Println(str)
    // str1, err1 := b1.ReadString('\n') //再讀一行
    // fmt.Println(err1)
    // fmt.Println(str1)

    // for {
    //     s, err := b1.ReadString('\n')
    //     if err == io.EOF {
    //         fmt.Println("讀取完畢")
    //         break
    //     }
    //     fmt.Println(s)
    // }

    //4, ReadByte
    // data, err1 := b1.ReadBytes('\n')
    // fmt.Println(data)
    // fmt.Println(err1)

    //Scanln只讀取空格前面的數據
    // s2 := ""
    // fmt.Println("請輸入:")
    // fmt.Scanln(&s2)
    // fmt.Println(s2)

    // b2 := bufio.NewReader(os.Stdin)
    // s2, _ := b2.ReadString('\n') //通過換行來表示讀取完畢
    // fmt.Println(s2)

}

 

 

bufio寫文件:

func main() {
    fileName := "C:\\Users\\fcl18\\Desktop\\cc.txt"
    file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, os.ModePerm)
    if err != nil {
        fmt.Println("err", err)
        return
    }
    defer file.Close()

    w1 := bufio.NewWriter(file)
    for i := 1; i <= 1000; i++ {
        w1.WriteString(fmt.Sprintf("%d:hello", i))
    }
    w1.Flush() //將緩衝區的內容寫入
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 LocalStorage 是HTML5中一個方便使用的 API,它為 Web 開發人員 提供了一個易於使用的5MB的存儲空間。使用 LocalStorage API 真的再簡單不過了。不信看下: //Save a value to loc ...
  • 概述 在上一節中介紹了兩種加密方法 對稱加密 非對稱加密 其中對稱加密性能高,但是有泄露密鑰的風險,而非對稱加密相反,加密性能較差,但是密鑰不易泄露,那麼能不能把他們進行一下結合呢? HTTPS採用混合加密 HTTPS經由HTTP進行通信,但利用SSL/TLS來加密數據包,而SSL/TLS的加密方式 ...
  • 在筆者上一篇文章`《驅動開發:內核枚舉IoTimer定時器》`中我們通過`IoInitializeTimer`這個API函數為跳板,向下掃描特征碼獲取到了`IopTimerQueueHead`也就是IO定時器的隊列頭,本章學習的枚舉DPC定時器依然使用特征碼掃描,唯一不同的是在新版系統中DPC是被異... ...
  • @ConditionalOnProperty實現按需註入bean 簡訊工具類 SmsUtil zhenghe-common是一個基礎包。 SmsUtil坐落在zhenghe-common里。先看看Smsutil的面目。 package com.emax.zhenghe.common.util; im ...
  • 問題現象 最近在本地調試公司的一個Web項目時,無意中發現日誌中出現了兩次同一個服務的init記錄,項目都是基於Spring來搭建的,按理說服務都是單例的,應該只有一次服務載入日誌才對,本著對工作認真負責(閑來無事)的態度,必然要一探究竟。 問題分析 為什麼同一個 Bean 會被容器初始化兩次? 首 ...
  • 序列化組件的三大功能 序列化,序列化器會把模型對象轉換成字典,經過response以後變成json字元串 反序列化,把客戶端發送過來的數據,經過request以後變成字典,序列化器可以把字典轉成模型 反序列化時同時會完成數據校驗功能 序列化器Serializer使用方法 查詢單個數據語法: 1.在s ...
  • JDBC和連接池03 8.事務 8.1事務介紹 基本介紹 JDBC程式中當一個Connection對象創建時,預設情況下是自動提交事務:每次執行一個SQL語句時,如果執行成功,就會向資料庫自動提交,而不能回滾。 JDBC程式中為了讓多個SQL語句作為一個整體執行,需要使用事務 調用Connectio ...
  • 前言 嗨嘍~大家好呀,這裡是魔王吶 ! 我又來更新小姐姐網站,批量採集得辦法拉~ 讓我們一起來學習吧~ 開發環境: Python 3.8 Pycharm 模塊使用: 第三方模塊 需要安裝 在cmd裡面 進行 pip install requests / parsel requests 如何安裝pyt ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...