bufio.NewReader 如何读取全部字符
时间: 2023-02-08 13:29:00 浏览: 207
使用 bufio.NewReader 可以读取 io.Reader 中的所有字符。可以通过以下方式读取全部字符:
```
r := bufio.NewReader(file)
// ReadString('\n') reads until the first occurrence of the separator.
// In this case, it reads the entire file because '\n' is not in the file.
content, _ := r.ReadString('\n')
```
也可以使用 ReadBytes 或者 ReadString,具体看需求。
```
content, _ := r.ReadBytes('\n')
content, _ := r.ReadString('\x00')
```
不过, 如果知道文件大小 可以使用ReadFull 取代, 效率更高
```
content := make([]byte, fileSize)
r.ReadFull(content)
```
相关问题
bufio.NewReader 之后的 ReadString
`bufio.NewReader` 函数用于创建一个新的带缓冲读取器。它接受一个 `io.Reader` 类型的参数,并返回一个指向 `bufio.Reader` 类型的指针。
`(*bufio.Reader).ReadString` 方法接受一个参数 delim,它是字符的十进制编码值。该方法会读取该缓冲区中的数据直到第一次遇到 delim 或者缓冲区结束位置。返回值为读取到的字符串(去除delim字符) 和一个错误值。
package main 2. 3. import ( 4. "bufio" 5. "fmt" 6. "os" 7. "io" 8. ) 9. 10. func main() { 11. inputFile, _ := os.Open("goprogram") 12. outputFile, _ := os.OpenFile("goprogramT", os.O_WRONLY|os.O_CREATE, 0666) 13. defer inputFile.Close() 14. defer outputFile.Close() 15. inputReader := bufio.NewReader(inputFile) 16. outputWriter := bufio.NewWriter(outputFile) 17. for { 18. inputString, _, readerError := inputReader.ReadLine() 19. if readerError == io.EOF { 20. fmt.Println("EOF") 21. return 22. } 23. outputString := string(inputString[2:5]) + "\r\n" 24. _, err := outputWriter.WriteString(outputString) 25. if err != nil { 26. fmt.Println(err) 27. return 28. } 29. } 30. fmt.Println("Conversion done") }
这是一段 Go 语言代码,目的是将 goprogram 中的一部分内容写入到 goprogramT 中。具体实现是,用 os 包打开输入和输出文件,利用 bufio 包读取输入和写入输出,主要的计算过程在 for 循环中完成,每读取一行输入就将其中的第 2 至 4 个字符写入输出文件。最后输出 Conversion done 表示转换完成。
阅读全文