Go中常用包笔记 bufio:带缓冲的IO操作/SCANNER(二)

Package bufio

提供可缓存的IO访问


  Scanner:    func NewScanner(r io.Reader) *Scanner //构造函数    func (s *Scanner) Buffer(buf []byte, max int) //指定使用的缓冲区    func (s *Scanner) Split(split SplitFunc) //设定切割函数 使用四个切割器    func (s *Scanner) Scan() bool  //扫描    func (s *Scanner) Err() error  //扫描发生的错误    func (s *Scanner) Bytes() []byte //上次扫描的结果    func (s *Scanner) Text() string  //上次扫描的结果      切割器:
func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)
func ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error)
func ScanRunes(data []byte, atEOF bool) (advance int, token []byte, err error)
func ScanWords(data []byte, atEOF bool) (advance int, token []byte, err error)

四个切割器,分割字节数组中的第一个字节/第一行/第一个Rune(UTF8字)/单词(不包含空格),方法本身可以作为

func (s *Scanner) Split(split SplitFunc)

的参数,配合Scanner按照字节/Rune/单词/行进行扫描,例如:

s := strings.NewReader()
bs := bufio.NewScanner(s)
bs.Split(bufio.ScanWords)
bs.Scan() {
       fmt.Printf(, bs.Text())
}
 func (s *Scanner) Bytes() []byte

Reader

func NewReader(rd io.Reader) *Reader  //构造函数

func NewReaderSize(rd io.Reader, size int) *Reader //构造函数,指定缓冲区大小

func (b *Reader) Buffered() int //获取缓冲区中数据大小

func (b *Reader) Discard(n int) (discarded int, err error) //跳过若干字节不读,实际跳过的字节不会比缓冲区剩余的多(若缓冲区为空则填充一次缓冲区)

func (b *Reader) Peek(n int) ([]byte, error)  //返回缓冲区的一个切片(缓冲区的引用,不会将数据读出)

func (b *Reader) Read(p []byte) (n int, err error) //读取若干字节

func (b *Reader) ReadByte() (byte, error)          //读取一个字节

func (b *Reader) ReadBytes(delim byte) ([]byte, error) //寻找一个字节并返回字节之前的全部内容

func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)//读取一行,推荐使用ReadBytes(‘\n‘) 或 ReadString(‘\n‘)的方式以替代

func (b *Reader) ReadRune() (r rune, size int, err error)  //读取一个Rune

func (b *Reader) ReadSlice(delim byte) (line []byte, err error) //读出数据 返回其切片

func (b *Reader) ReadString(delim byte) (string, error) //读出字符串

func (b *Reader) Reset(r io.Reader) //丢弃缓存重置状态

func (b *Reader) UnreadByte() error //撤销最近一次readByte操作

func (b *Reader) UnreadRune() error //类似上

func (b *Reader) WriteTo(w io.Writer) (n int64, err error) //reader直接写入一个Writer

 Writer

func NewWriter(w io.Writer) *Writer

func NewWriterSize(w io.Writer, size int) *Writer

func (b *Writer) Available() int //缓冲区中可用大小

func (b *Writer) Buffered() int  //缓冲区中未提交的数据的大小

func (b *Writer) Flush() error   //提交缓冲区中数据

func (b *Writer) ReadFrom(r io.Reader) (n int64, err error) //从一个reader中读取并写入

func (b *Writer) Reset(w io.Writer) //丢弃缓存重置状态

func (b *Writer) Write(p []byte) (nn int, err error)

func (b *Writer) WriteByte(c byte) error

func (b *Writer) WriteRune(r rune) (size int, err error)

func (b *Writer) WriteString(s string) (int, error)

时间: 2024-12-07 22:09:43

Go中常用包笔记 bufio:带缓冲的IO操作/SCANNER(二)的相关文章

Go中常用包笔记 内置builtin(一)

Package builtin 定义了Go的一些预定义的符号.这些符号不需要引用任何包就可以使用. func append(slice []Type, elems ...Type) []Type 给数组切片追加元素,"泛型" func cap(v Type) int 数组,数组指针的元素数量:切片的最大容量:channel的缓冲区大小 func close(c chan<- Type) 关闭channel(只应该由channel的发送方关闭,不能对只能接收的单向channel使用

GO中常用包笔记 bytes(四)

Package bytes 对字节数组进行操作的包.功能和strings包相似. bytes包提供的功能有: 和另一个字节数组切片的关系(逐字节比较大小,是否相等/相似,是否包含/包含次数,位置搜索,是否是前缀后缀) 2.字节数组切片和字符串的关系(字符串中是否含有字节数组所包含的rune,以及在字符串中的位置) 3.字节数组切片和rune的关系(字节数组中是否含有特定的或满足特定条件的rune,以及在字节数组中的位置) 4.字节数组切片和字节的关系(包含/位置) 5.分割分组,分组连结 6.大

Go中常用包笔记 字符串strings(四)

Package strings 此包和bytes包十分类似,除了没有bytes.Buffer,func Equal(a, b []byte) bool ,func Runes(s []byte) []rune,以外,bytes包含的方法strings都含有,只不过各方法其中一个参数有[]byte变为string而已.但是有个独特的type Replacer: func NewReplacer(oldnew ...string) *Replacer //构造函数,不定参数,参数格式为old1,ne

不带缓冲的IO的标准输入到标准输出

在POSIX标准中提供了函数open, read, write, lseek以及close提供不带缓冲的IO,这些函数都是使用文件描述符: 在Linux/Unix系统中将标准输入复制到标准输出简单实现如下: #include <unistd.h> #define BUFFSIZE 4096 int main(int argc, char **argv) { int n; char buf[BUFFSIZE]; while((n = read(STDIN_FILENO, buf, BUFFSIZ

带缓冲的IO和不带缓冲的IO

文件描述符: 文件描述符是一个小的非负整数,是内核用来标识特定进程正在访问的文件 标准输入/输出/出错: shell为每个程序打开了三个文件描述符,STDIN_FILEON,STDOUT_FILEON,STDERR_FILEON,默认这三个文件描述符都链向终端 不带缓冲的IO: 函数open read write lseek close提供了不用缓冲的IO.这些函数都使用文件描述符 size_t read(int fd,void *buf,size_t count) 从fd标识的文件中一次读取c

java中常用的包、类、以及包中常用的类、方法、属性-----io包

由于最近有需要,所以下面是我整理的在开发中常用的包.类.以及包中常用的类.方法.属性:有需要的看看 java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.math.*; java.sql.*; java.text.*; java.awt.*; javax.swing.*;   包名 接口 类 方法 属性 java.io.*; java.io.Serializable实现序列化 java.io.Buffe

Go标准库-带缓冲的IO(bufio)

概述bufio模块通过对io模块的封装,提供了数据缓冲功能,能够一定程度减少大块数据读写带来的开销. 实际上在bufio各个组件内部都维护了一个缓冲区,数据读写操作都直接通过缓存区进行.当发起一次读写操作时,会首先尝试从缓冲区获取数据:只有当缓冲区没有数据时,才会从数据源获取数据更新缓冲. Reader可以通过NewReader函数创建bufio.Reader对象,函数接收一个io.Reader作为参数:也就是说,bufio.Reader不能直接使用,需要绑定到某个io.Reader上.函数声明

JDK库rt包中常用包说明

java.lang:语言包 java.util:实用包 java.awt:抽象窗口工具包 javax.swing:轻量级的窗口工具包,这是目前使用最广泛的GUI程序设计包 java.io:输入输出包 java.net:网络函数包 java.applet:编制applet用到的包(目前编制applet程序时,更多的是使用swing中的JApplet类). 详细说明 java.lang:语言包 这是Java语言的核心包,系统自动将这个包引入到用户程序,该包中主要类有: object类:它是所有类的父

Latex常用包笔记

1.hyperref 标签包 \usepackage[colorlinks,linkcolor=black,anchorcolor=blue,citecolor=green]{hyperref} 2.geometry 边距包 \usepackage{geometry} \geometry{left=2.7cm, right=2.7cm, top=2.7cm, bottom=2.7cm} 3.\usepackage{setspace} %行距包 \begin{document} \begin{sp