См. read_until :
Считать все байты в buf, пока не будет достигнут байт разделителя или EOF.
Эта функция будет считывать байты из нижележащего потока, пока разделитель или EOF не будет нашел. После обнаружения все байты до и включая разделитель (если он найден) будут добавлены в buf. * 1006 *
В случае успеха эта функция вернет общее количество прочитанных байтов.
Пример в ржавчине:
fn main() {
use std::io::{self, BufRead};
let mut cursor = io::Cursor::new(b"a-b-c");
let mut buf = vec![];
let num_bytes = cursor
.read_until(b'-', &mut buf)
.expect("reading from cursor won't fail");
println!("{}", num_bytes); // 2
println!("{:?}", buf); // [97, 45]
let s = String::from_utf8(buf).expect("Invalid UTF-8");
println!("{}", s); // a-
}
Пример в Go:
package main
import (
"bufio"
"fmt"
"log"
"strings"
)
func main() {
s := `a-b-c`
r := strings.NewReader(s) // type Reader interface { Read(p []byte) (n int, err error) }
br := bufio.NewReader(r) // NewReaderSize(4096)
bs, err := br.ReadSlice('-') // reads to the internal buffer
if err != nil {
log.Fatal(err)
}
fmt.Println(bs) // [97 45]
fmt.Println(string(bs)) //a-
}