bufio.NewScanner
을 사용하여 다음 함수를 사용하여 파일을 한 줄씩 읽으려고했습니다. Golang의 bufio.NewScanner는 각각 줄이 아닌 메모리에있는 전체 파일을 읽습니까?
func TailFromStart(fd *os.File, wg *sync.WaitGroup) {
fd.Seek(0,0)
scanner := bufio.NewScanner(fd)
for scanner.Scan() {
line := scanner.Text()
offset, _ := fd.Seek(0, 1)
fmt.Println(offset)
fmt.Println(line)
offsetreset, _ := fd.Seek(offset, 0)
fmt.Println(offsetreset)
}
offset, err := fd.Seek(0, 1)
CheckError(err)
fmt.Println(offset)
wg.Done()
}
난 파일
EOF
도달 할 때까지 그러나, 각 반복에서 동일한 값을 인쇄하고,이 증가하는 순서로 오프셋 인쇄를 기대 하였다.
127.0.0.1 - - [11/Aug/2016:22:10:39 +0530] "GET /ttt HTTP/1.1" 404 437 "-" "curl/7.38.0"
613
613
127.0.0.1 - - [11/Aug/2016:22:10:42 +0530] "GET /qqq HTTP/1.1" 404 437 "-" "curl/7.38.0"
613
613은 파일의 총 문자 수입니다.
cat /var/log/apache2/access.log | wc
7 84 613
임을 메모리를 통해 내가 잘못 이해하거나 bufio.NewScanner
메모리에 전체 파일을 읽고 않으며, 반복? 그렇다면 줄 단위로 읽을 수있는 더 좋은 방법이 있습니까?
아니요, 기본 버퍼 크기는 4096 바이트입니다. 큰 파일로 시도해보십시오. – JimB