2012-12-01 5 views
17

bufio 패키지의 golang의 특정 기능을 알고 있습니다.골란의 버퍼링 된 판독기에서 특정 바이트 수 읽기

func (b *Reader) Peek(n int) ([]byte, error) 

는 픽 독자를 진행하지 않고 다음 n 바이트 를 반환합니다. 바이트는 다음 읽기 호출에서 유효하지 않습니다. Peek이 n 바이트보다 작은 바이트를 반환하면 읽기가 짧은 이유를 설명하는 오류도 반환합니다. n이 b의 버퍼 크기보다 큰 경우 오류는 ErrBufferFull입니다.

나는 독자을 발전 할 것이라는 리더에서 바이트의 특정 숫자를 읽을 수 있어야합니다. 기본적으로 위의 함수와 동일하지만 독자를 발전시킵니다. 아무도 이것을 성취 할 방법을 알고 있습니까?

답변

22
func (b *Reader) Read(p []byte) (n int, err error) 

http://golang.org/pkg/bufio/#Reader.Read

바이트의 수는 bufio.Read 방법은 호출하는 len(p)

+7

이 '항상'하지만 바이트의 특정 숫자를 읽지 않습니다, 그것은 단지를 제한합니다보다 적을 수 있습니다 읽은 바이트를 len (p)로 읽습니다. – dustinevan

3

판독기에 n 바이트 크기의 버퍼를 전달합니다.

47

참고로 제한됩니다 읽기는 IT가 EOF에 도달하지 않고, n < len(p)를 반환 할 수 있다는 것을 의미, 대부분 한 번에 io.Read을 기본. 정확히 len(p) 바이트를 읽거나 오류와 함께 실패 할 경우,이 같은 io.ReadFull를 사용할 수 있습니다

n, err := io.ReadFull(reader, p) 

이 독자 버퍼링 경우에도 작동합니다.

3

난 당신이 파일의 모든 유형을 읽을려고하고 청크 데이터를 전송에 유용 할 수있다, 특히, 아래에 사용하는 방법을 보여줍니다 예입니다 읽기()를 선호한다하고

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)) 
} 
0

이렇게하려면 당신은

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)

로이 조각에 바이트 슬라이스와 read 데이터를 생성해야

읽기가 p. p로 읽어 들인 바이트 수를 반환합니다. 바이트는 따라서, 기본 리더에 최대 하나의 읽기에서 을 촬영 N 렌 (P)이