我在 go 中有兩種類型的文件,可以用以下字符串表示:const nonewline := 'hello' # content but no newline
const newline := `hello\nworld' # content with newline我的目標(biāo)只是讀取兩個(gè)文件中的所有內(nèi)容(它通過流進(jìn)入,所以我不能使用像 ReadAll 這樣的內(nèi)置內(nèi)容,我正在使用stdioPipe)并在它們出現(xiàn)的地方包含換行符。我正在使用 Scanner 但它似乎沒有辦法判斷該行是否以換行符結(jié)尾,如果我使用Scanner.Text()它會(huì)自動(dòng)拆分(因此無法判斷一行是否以換行符結(jié)尾,或者該行剛剛終止于文件末尾)。我也研究過編寫自定義 Split 函數(shù),但這不是太過分了嗎?我只需要拆分一些固定長度(我假設(shè)默認(rèn)緩沖區(qū)大小 - 4096),或者文件中剩余的任何內(nèi)容,以較短者為準(zhǔn)。我也在看,Scanner.Split(bufio.ScanBytes)但是通過分塊讀取可以加快速度嗎?無論如何,這似乎應(yīng)該是非常簡單的事情。
1 回答

元芳怎么了
TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用此循環(huán)以固定大小的塊讀取流:
chunk := make([]byte, size) // Size is the chunk size.
for {
n, err := io.ReadFull(stream, chunk)
if n > 0 {
// Do something with the chunk of data.
process(chunk[:n])
}
if err != nil {
break
}
}
- 1 回答
- 0 關(guān)注
- 86 瀏覽
添加回答
舉報(bào)
0/150
提交
取消