que - golang lib
Leyendo el número específico de bytes de un lector almacenado en golang (5)
Para hacer esto, solo necesita crear un segmento de bytes y read los datos en este segmento con
n := 512
buff := make([]byte, n)
fs.Read(buff) // fs is your reader. Can be like this fs, _ := os.Open(''file'')
func (b *Reader) Read(p []byte) (n int, err error)
Lee datos de lectura en p. Devuelve el número de bytes leídos en p. Los bytes se toman a lo sumo de una lectura en el Reader subyacente, por lo tanto, n puede ser menor que len (p)
Soy consciente de la función específica en golang del paquete bufio .
func (b *Reader) Peek(n int) ([]byte, error)
Peek devuelve los siguientes n bytes sin adelantar al lector . Los bytes dejan de ser válidos en la siguiente llamada de lectura. Si Peek devuelve menos de n bytes, también devuelve un error que explica por qué la lectura es corta. El error es ErrBufferFull si n es mayor que el tamaño del búfer de b.
Necesito poder leer un número específico de bytes de un lector que hará avanzar al lector . Básicamente, idéntica a la función anterior, pero avanza el lector. ¿Alguien sabe cómo lograr esto?
Pase un búfer de tamaño n-bytes al lector.
Prefiero leer (), especialmente si va a leer cualquier tipo de archivos y podría ser útil para enviar datos en fragmentos, a continuación se muestra un ejemplo para mostrar cómo se usa
fs, err := os.Open("fileName");
if err != nil{
fmt.Println("error reading file")
return
}
defer fs.Close()
reader := bufio.NewReader(fs)
buf := make([]byte, 1024)
for{
v, _ := reader.Read(buf) //ReadString and ReadLine() also applicable or alternative
if v == 0{
return
}
//in case it is a string file, you could check its content here...
fmt.Print(string(buf))
}
Tenga en cuenta que el método bufio.Read
invoca al io.Read
subyacente como máximo una vez, lo que significa que puede devolver n < len(p)
, sin alcanzar EOF. Si desea leer exactamente len(p)
bytes o fallar con un error, puede usar io.ReadFull
esta manera:
n, err := io.ReadFull(reader, p)
Esto funciona incluso si el lector está en búfer.
func (b *Reader) Read(p []byte) (n int, err error)
http://golang.org/pkg/bufio/#Reader.Read
El número de bytes leídos se limitará a len(p)