Go中bufio.ReadString和bufio.Read返回EOF區別

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

// 帶緩衝的讀入
func main() {
	file, err := os.Open("1.txt")
	if err != nil {
		fmt.Println("文件打開失敗" + err.Error())
		return
	}

	defer func() {
		file.Close()
		fmt.Println("文件關閉")
	}()

	// 創建帶緩衝的讀取器
	reader := bufio.NewReader(file)

	for  {
		str, err := reader.ReadString('\n')
		if err == nil {
			fmt.Print(str)
		} else if err == io.EOF{
			// ReadString最後會同EOF和最後的數據一起返回
			//fmt.Println(str)
			break
		} else {
			fmt.Println("出錯!!")
			return
		}
	}

	//bytes := make([]byte, 16)
	//for  {
	// Read不會,單獨返回EOF
	//	c, err := reader.Read(bytes)
	//	if err == nil {
	//		fmt.Print(string(bytes[:c]))
	//	} else if err == io.EOF{
	//		//fmt.Println(string(bytes[:]))
	//		break
	//	} else {
	//		fmt.Println("出錯!!")
	//		return
	//	}
	//}

	fmt.Println("讀取完畢")
}

1.txt內容

jadeshu
hello world!
skdjksjd

顯示結果《最後一行數據沒有顯示》

ReadString()即返回err爲EOF時還含有數據

Read()就不會有這種情況,EOF單獨返回

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章