成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Go語(yǔ)言文件讀取的一些總結(jié)

Go語(yǔ)言文件讀取的一些總結(jié)

熱門標(biāo)簽:福州鐵通自動(dòng)外呼系統(tǒng) 濮陽(yáng)自動(dòng)外呼系統(tǒng)代理 智能電銷機(jī)器人營(yíng)銷 廣東語(yǔ)音外呼系統(tǒng)供應(yīng)商 長(zhǎng)沙ai機(jī)器人電銷 賺地圖標(biāo)注的錢犯法嗎 澳門防封電銷卡 烏魯木齊人工電銷機(jī)器人系統(tǒng) 地圖標(biāo)注測(cè)試

Go語(yǔ)言在進(jìn)行文件操作的時(shí)候,可以有多種方法。最常見的比如直接對(duì)文件本身進(jìn)行Read和Write; 除此之外,還可以使用bufio庫(kù)的流式處理以及分片式處理;如果文件較小,使用ioutil也不失為一種方法。

面對(duì)這么多的文件處理的方式,那么初學(xué)者可能就會(huì)有困惑:我到底該用那種?它們之間有什么區(qū)別?筆者試著從文件讀取來對(duì)go語(yǔ)言的幾種文件處理方式進(jìn)行分析。

os.File、bufio、ioutil比較

效率測(cè)試

文件的讀取效率是所有開發(fā)者都會(huì)關(guān)心的話題,尤其是當(dāng)文件特別大的時(shí)候。為了盡可能的展示這三者對(duì)文件讀取的性能,我準(zhǔn)備了三個(gè)文件,分別為small.txt,midium.txt、large.txt,分別對(duì)應(yīng)KB級(jí)別、MB級(jí)別和GB級(jí)別。

這三個(gè)文件大小分別為4KB、21MB、1GB。其中內(nèi)容是比較常規(guī)的json格式的文本。

測(cè)試代碼如下:

//使用File自帶的Read
func read1(filename string) int {
 fi, err := os.Open(filename)
 if err != nil {
  panic(err)
 }
 defer fi.Close()
 buf := make([]byte, 4096)
 var nbytes int
 for {
  n, err := fi.Read(buf)
  if err != nil  err != io.EOF {
   panic(err)
  }
  if n == 0 {
   break
  }
  nbytes += n

 }
 return nbytes
}

read1函數(shù)使用的是os庫(kù)對(duì)文件進(jìn)行直接操作,為了確定確實(shí)都到了文件內(nèi)容,并將讀到的大小字節(jié)數(shù)返回。

//使用bufio
func read2(filename string) int {
 fi, err := os.Open(filename)
 if err != nil {
  panic(err)
 }
 defer fi.Close()
 buf := make([]byte, 4096)
 var nbytes int
 rd := bufio.NewReader(fi)
 for {
  n, err := rd.Read(buf)
  if err != nil  err != io.EOF {
   panic(err)
  }
  if n == 0 {
   break
  }
  nbytes += n
 }
 return nbytes
}

read2函數(shù)使用的是bufio庫(kù),操作NewReader對(duì)文件進(jìn)行流式處理,和前面一樣,為了確定確實(shí)都到了文件內(nèi)容,并將讀到的大小字節(jié)數(shù)返回。

//使用ioutil
func read3(filename string) int {
 fi, err := os.Open(filename)
 if err != nil {
  panic(err)
 }
 defer fi.Close()
 fd, err := ioutil.ReadAll(fi)
 nbytes := len(fd)
 return nbytes
}

read3函數(shù)是使用ioutil庫(kù)進(jìn)行文件讀取,這種方式比較暴力,直接將文件內(nèi)容一次性全部讀到內(nèi)存中,然后對(duì)內(nèi)存中的文件內(nèi)容進(jìn)行相關(guān)的操作。

我們使用如下的測(cè)試代碼進(jìn)行測(cè)試:

func testfile1(filename string) {
 fmt.Printf("============test1 %s ===========\n", filename)
 start := time.Now()
 size1 := read1(filename)
 t1 := time.Now()
 fmt.Printf("Read 1 cost: %v, size: %d\n", t1.Sub(start), size1)
 size2 := read2(filename)
 t2 := time.Now()
 fmt.Printf("Read 2 cost: %v, size: %d\n", t2.Sub(t1), size2)
 size3 := read3(filename)
 t3 := time.Now()
 fmt.Printf("Read 3 cost: %v, size: %d\n", t3.Sub(t2), size3)
}

在main函數(shù)中調(diào)用如下:

func main() {
 testfile1("small.txt")
 testfile1("midium.txt")
 testfile1("large.txt")
 // testfile2("small.txt")
 // testfile2("midium.txt")
 // testfile2("large.txt")
}

測(cè)試結(jié)果如下所示:

從以上結(jié)果可知:

  • 當(dāng)文件較小(KB級(jí)別)時(shí),ioutil > bufio > os。
  • 當(dāng)文件大小比較常規(guī)(MB級(jí)別)時(shí),三者差別不大,但bufio又是已經(jīng)顯現(xiàn)出來。
  • 當(dāng)文件較大(GB級(jí)別)時(shí),bufio > os > ioutil。

原因分析

為什么會(huì)出現(xiàn)上面的不同結(jié)果?

其實(shí)ioutil最好理解,當(dāng)文件較小時(shí),ioutil使用ReadAll函數(shù)將文件中所有內(nèi)容直接讀入內(nèi)存,只進(jìn)行了一次io操作,但是os和bufio都是進(jìn)行了多次讀取,才將文件處理完,所以ioutil肯定要快于os和bufio的。

但是隨著文件的增大,達(dá)到接近GB級(jí)別時(shí),ioutil直接讀入內(nèi)存的弊端就顯現(xiàn)出來,要將GB級(jí)別的文件內(nèi)容全部讀入內(nèi)存,也就意味著要開辟一塊GB大小的內(nèi)存用來存放文件數(shù)據(jù),這對(duì)內(nèi)存的消耗是非常大的,因此效率就慢了下來。

如果文件繼續(xù)增大,達(dá)到3GB甚至以上,ioutil這種讀取方式就完全無能為力了。(一個(gè)單獨(dú)的進(jìn)程空間為4GB,真正存放數(shù)據(jù)的堆區(qū)和棧區(qū)更是遠(yuǎn)遠(yuǎn)小于4GB)。

而os為什么在面對(duì)大文件時(shí),效率會(huì)低于bufio?通過查看bufio的NewReader源碼不難發(fā)現(xiàn),在NewReader里,默認(rèn)為我們提供了一個(gè)大小為4096的緩沖區(qū),所以系統(tǒng)調(diào)用會(huì)每次先讀取4096字節(jié)到緩沖區(qū),然后rd.Read會(huì)從緩沖區(qū)去讀取。

const (
 defaultBufSize = 4096
)

func NewReader(rd io.Reader) *Reader {
 return NewReaderSize(rd, defaultBufSize)
}

func NewReaderSize(rd io.Reader, size int) *Reader {
 // Is it already a Reader?
 b, ok := rd.(*Reader)
 if ok  len(b.buf) >= size {
  return b
 }
 if size  minReadBufferSize {
  size = minReadBufferSize
 }
 r := new(Reader)
 r.reset(make([]byte, size), rd)
 return r
}

而os因?yàn)樯倭诉@一層緩沖區(qū),每次讀取,都會(huì)執(zhí)行系統(tǒng)調(diào)用,因此內(nèi)核頻繁的在用戶態(tài)和內(nèi)核態(tài)之間切換,而這種切換,也是需要消耗的,故而會(huì)慢于bufio的讀取方式。

筆者翻閱網(wǎng)上資料,關(guān)于緩沖,有內(nèi)核中的緩沖和進(jìn)程中的緩沖兩種,其中,內(nèi)核中的緩沖是內(nèi)核提供的,即系統(tǒng)對(duì)磁盤提供一個(gè)緩沖區(qū),不管有沒有提供進(jìn)程中的緩沖,內(nèi)核緩沖都是存在的。

而進(jìn)程中的緩沖是對(duì)輸入輸出流做了一定的改進(jìn),提供的一種流緩沖,它在讀寫操作發(fā)生時(shí),先將數(shù)據(jù)存入流緩沖中,只有當(dāng)流緩沖區(qū)滿了或者刷新(如調(diào)用flush函數(shù))時(shí),才將數(shù)據(jù)取出,送往內(nèi)核緩沖區(qū),它起到了一定的保護(hù)內(nèi)核的作用。
因此,我們不難發(fā)現(xiàn),os是典型的內(nèi)核中的緩沖,而bufio和ioutil都屬于進(jìn)程中的緩沖。

總結(jié)

當(dāng)讀取小文件時(shí),使用ioutil效率明顯優(yōu)于os和bufio,但如果是大文件,bufio讀取會(huì)更快。

讀取一行數(shù)據(jù)

前面簡(jiǎn)要分析了go語(yǔ)言三種不同讀取文件方式之間的區(qū)別。但實(shí)際的開發(fā)中,我們對(duì)文件的讀取往往是以行為單位的,即每次讀取一行進(jìn)行處理。

go語(yǔ)言并沒有像C語(yǔ)言一樣給我們提供好了類似于fgets這樣的函數(shù)可以正好讀取一行內(nèi)容,因此,需要自己去實(shí)現(xiàn)。
從前面的對(duì)比分析可以知道,無論是處理大文件還是小文件,bufio始終是最為平滑和高效的,因此我們考慮使用bufio庫(kù)進(jìn)行處理。

翻閱bufio庫(kù)的源碼,發(fā)現(xiàn)可以使用如下幾種方式進(jìn)行讀取一行文件的處理:

  • ReadBytes
  • ReadString
  • ReadSlice
  • ReadLine

效率測(cè)試

在討論這四種讀取一行文件操作的函數(shù)之前,仍然做一下效率測(cè)試。
測(cè)試代碼如下:

func readline1(filename string) {
 fi, err := os.Open(filename)
 if err != nil {
  panic(err)
 }
 defer fi.Close()
 rd := bufio.NewReader(fi)
 for {
  _, err := rd.ReadBytes('\n')
  if err != nil || err == io.EOF {
   break
  }
 }
}
func readline2(filename string) {
 fi, err := os.Open(filename)
 if err != nil {
  panic(err)
 }
 defer fi.Close()
 rd := bufio.NewReader(fi)
 for {
  _, err := rd.ReadString('\n')
  if err != nil || err == io.EOF {
   break
  }
 }
}
func readline3(filename string) {
 fi, err := os.Open(filename)
 if err != nil {
  panic(err)
 }
 defer fi.Close()
 rd := bufio.NewReader(fi)
 for {
  _, err := rd.ReadSlice('\n')
  if err != nil || err == io.EOF {
   break
  }
 }
}
func readline4(filename string) {
 fi, err := os.Open(filename)
 if err != nil {
  panic(err)
 }
 defer fi.Close()
 rd := bufio.NewReader(fi)
 for {
  _, _, err := rd.ReadLine()
  if err != nil || err == io.EOF {
   break
  }
 }
}

可以看到,這四種操作方式,無論是函數(shù)調(diào)用,還是函數(shù)返回值的處理,其實(shí)都是大同小異的。但通過測(cè)試效率,則可以看出它們之間的區(qū)別。

我們使用下面的測(cè)試代碼:

func testfile2(filename string) {
 fmt.Printf("============test2 %s ===========\n", filename)
 start := time.Now()
 readline1(filename)
 t1 := time.Now()
 fmt.Printf("Readline 1 cost: %v\n", t1.Sub(start))
 readline2(filename)
 t2 := time.Now()
 fmt.Printf("Readline 2 cost: %v\n", t2.Sub(t1))
 readline3(filename)
 t3 := time.Now()
 fmt.Printf("Readline 3 cost: %v\n", t3.Sub(t2))
 readline4(filename)
 t4 := time.Now()
 fmt.Printf("Readline 4 cost: %v\n", t4.Sub(t3))
}

在main函數(shù)中調(diào)用如下:

func main() {
 // testfile1("small.txt")
 // testfile1("midium.txt")
 // testfile1("large.txt")
 testfile2("small.txt")
 testfile2("midium.txt")
 testfile2("large.txt")
}

運(yùn)行結(jié)果如下所示:

通過現(xiàn)象,除了small.txt之外,大致可以分為兩組:

  • ReadBytes對(duì)小文件處理效率最差
  • 在處理大文件時(shí),ReadLine和ReadSlice效率相近,要明顯快于ReadString和ReadBytes。

原因分析

為什么會(huì)出現(xiàn)上面的現(xiàn)象,不防從源碼層面進(jìn)行分析。
通過閱讀源碼,我們發(fā)現(xiàn)這四個(gè)函數(shù)之間存在這樣一個(gè)關(guān)系:

  • ReadLine - (調(diào)用) ReadSlice
  • ReadString - (調(diào)用)ReadBytes-(調(diào)用)ReadSlice

既然如此,那為什么在處理大文件時(shí),ReadLine效率要明顯高于ReadBytes呢?

首先,我們要知道,ReadSlice是切片式讀取,即根據(jù)分隔符去進(jìn)行切片。
通過源碼發(fā)下,ReadLine只是在切片讀取的基礎(chǔ)上,對(duì)換行符\n和\r\n做了一些處理:

func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error) {
 line, err = b.ReadSlice('\n')
 if err == ErrBufferFull {
  // Handle the case where "\r\n" straddles the buffer.
  if len(line) > 0  line[len(line)-1] == '\r' {
   // Put the '\r' back on buf and drop it from line.
   // Let the next call to ReadLine check for "\r\n".
   if b.r == 0 {
    // should be unreachable
    panic("bufio: tried to rewind past start of buffer")
   }
   b.r--
   line = line[:len(line)-1]
  }
  return line, true, nil
 }

 if len(line) == 0 {
  if err != nil {
   line = nil
  }
  return
 }
 err = nil

 if line[len(line)-1] == '\n' {
  drop := 1
  if len(line) > 1  line[len(line)-2] == '\r' {
   drop = 2
  }
  line = line[:len(line)-drop]
 }
 return
}

而ReadBytes則是通過append先將讀取的內(nèi)容暫存到full數(shù)組中,最后再copy出來,append和copy都是要消耗內(nèi)存和io的,因此效率自然就慢了。其源碼如下所示:

func (b *Reader) ReadBytes(delim byte) ([]byte, error) {
 // Use ReadSlice to look for array,
 // accumulating full buffers.
 var frag []byte
 var full [][]byte
 var err error
 n := 0
 for {
  var e error
  frag, e = b.ReadSlice(delim)
  if e == nil { // got final fragment
   break
  }
  if e != ErrBufferFull { // unexpected error
   err = e
   break
  }

  // Make a copy of the buffer.
  buf := make([]byte, len(frag))
  copy(buf, frag)
  full = append(full, buf)
  n += len(buf)
 }

 n += len(frag)

 // Allocate new buffer to hold the full pieces and the fragment.
 buf := make([]byte, n)
 n = 0
 // Copy full pieces and fragment in.
 for i := range full {
  n += copy(buf[n:], full[i])
 }
 copy(buf[n:], frag)
 return buf, err
}

總結(jié)

讀取文件中一行內(nèi)容時(shí),ReadSlice和ReadLine性能優(yōu)于ReadBytes和ReadString,但由于ReadLine對(duì)換行的處理更加全面(兼容\n和\r\n換行),因此,實(shí)際開發(fā)過程中,建議使用ReadLine函數(shù)。

 到此這篇關(guān)于Go語(yǔ)言文件讀取的一些總結(jié)的文章就介紹到這了,更多相關(guān)Go語(yǔ)言文件讀取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • GO語(yǔ)言常用的文件讀取方式
  • go語(yǔ)言讀取csv文件并輸出的方法

標(biāo)簽:阿克蘇 太原 調(diào)研邀請(qǐng) 西雙版納 德州 貴陽(yáng) 慶陽(yáng) 廣西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go語(yǔ)言文件讀取的一些總結(jié)》,本文關(guān)鍵詞  語(yǔ)言,文件,讀,取的,一些,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go語(yǔ)言文件讀取的一些總結(jié)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Go語(yǔ)言文件讀取的一些總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产极品嫩模在线观看91精品| 在线精品小视频| 91美女在线| 久久精品夜色噜噜亚洲aⅴ| 殴美一级特黄aaaaaa| 狠狠躁狠狠躁视频专区| 欧美77777免费视频| 欧美色另类天堂2015| 久久久国产综合精品女国产盗摄| 亚洲s色大片| 91免费视频网站在线观看| 亚洲精品国产一区二区在线| 国产日韩一区二区三区在线| 色狠狠av一区二区三区香蕉蜜桃| 久久国产精品高清一区二区三区| 亚洲精品喷潮一区二区三区| 一区二区三区免费看| 久久国产精品免费| videos性欧美另类高清| 91久久伊人青青碰碰婷婷| 精品人妻一区二区三区三区四区| 91成人免费看| 亚洲熟女少妇一区二区| 日韩免费视频在线观看| 实拍女处破www免费看| 亚洲视频高清| 亚洲电影第1页| 波多野结衣视频一区| 久久精品波多野结衣| 亚洲第一福利在线观看| 55av亚洲| 国产综合精品视频| 少妇一级淫片免费放播放| 欧美大片网站| 做爰视频毛片视频| 久久久久久91香蕉国产| 亚洲国产精品久久久天堂| 久久激情综合网| 欧美成熟毛茸茸复古| 丝袜足控免费网站xx网站| 久久99精品久久久久久野外| 精品久久久久久久久久国产| 四虎wwwcom| 成人激情开心网| 99精品视频播放| 日韩电影在线观看网站| 亚洲精品亚洲人成在线观看| 韩国av一区二区三区四区| 亚洲精品在线看| 日日噜噜噜噜久久久精品毛片| 欧美一级成年大片在线观看| 成人午夜电影小说| 日韩欧美伦理电影院| 天堂av一区二区三区在线播放| 亚洲高清三级视频| 亚洲色图制服丝袜| 亚洲视频 中文字幕| 日本午夜在线视频| 91久久精品www人人做人人爽| 最近2019中文字幕在线高清| 国产在线视频不卡| 99re视频在线观看| 日韩精品在线电影| 亚洲欧美日韩一区在线观看| 天天噜天天色| 性8sex亚洲区入口| 夜夜嗨av一区二区三区四区| 在线看的av网站| av在线播放一区二区| 国产传媒一区二区| 1插菊花综合| 影视先锋av资源站| 日本高清一区| av网址在线免费观看| 日韩精品视频在线观看网址| 菠萝蜜视频网站入口| 精品久久久99| 鲁丝一区二区三区| 精品精品国产高清a毛片牛牛| 中文字幕免费观看视频| 99久久久国产精品免费调教网站| 国内精品自线一区二区三区视频| 极品盗摄国产盗摄合集| 欧美日韩国产综合久久| 天天综合网站| 高潮无码精品色欲av午夜福利| 日日夜夜一区二区| xfplay爱情电影网love| 亚洲综合久久久久| 日本少妇激情视频| 国产小视频免费在线观看| 麻豆精品不卡国产免费看| 天天干天天操天天做| 先锋影音资源综合在线播放av| 欧美精品一区二区视频| 免费看国产一级片| 精品99999| 欧美肉体xxxx裸体137大胆| 91野花视频| 卡一精品卡二卡三网站乱码| 欧美精品色哟哟| 欧美性色黄大片人与善| 亚洲精品无码久久久久| 亚洲欧美日本韩国| 免费久久99精品国产自在现线| 一本一道久久a久久精品综合| www.成人av| 97国产精品视频人人做人人爱| 91视频综合网| 在线观看一区不卡| yy111111少妇嫩草影院| 亚洲成人a**址| 无人视频在线观看免费| 国产激情999| 777午夜精品视频在线播放| 青青草免费在线观看| 亚洲色图20p| caoporen国产精品视频| 国产精品一区二区你懂得| 阿v视频在线观看| 992tv免费直播在线观看| 国产一区二区美女视频| 乱一区二区三区在线播放| 欧美性生活一级片| 日韩黄色影片| 欧美日韩一二三| 久热视线观看免费视频| 1区2区3区精品视频| 色老汉av一区二区三区| 日本视频www| 91免费在线看片| 国产日韩精品入口| 国产伦精品一区二区三区精品| 天堂av网手机版| 亚洲国产综合网| 美女脱光内衣内裤视频久久影院| 国产模特精品视频久久久久| 在线视频1区| 国产精品一区二区三区99| 一区二区欧美日韩视频| 成人av毛片| 欧美整片在线观看| 亚洲一区二区在线播放相泽| 日本公妇乱淫免费视频一区三区| 亚洲一区久久久| 妞干网免费视频| 免费在线观看h| 色偷偷88888欧美精品久久久| 国产精品久久久久精k8| 丁香六月天婷婷| 男人日女人网站| 中文字幕的久久| 久久99精品久久久久久久青青日本| 97精品视频| 91在线亚洲| 中文字幕日韩欧美在线视频| 精品一区二区三区视频在线观看| 激情深爱综合网| 91麻豆精品国产91久久久久推荐资源| 国内精久久久久久久久久人| 欧洲精品久久久久毛片完整版| 中文在线最新版天堂8| 亚洲白拍色综合图区| 日本xxxx黄色| 欧美xxxx18国产| 国语精品一区| 欧美精品一区在线| 亚洲av无码乱码国产精品久久| av在线资源站| 欧美不卡高清一区二区三区| 2018中文字幕在线观看| 色噜噜狠狠狠综合曰曰曰| 欧美亚洲日本黄色| 爱爱视频免费在线观看| 亚洲国产精品久久久久爰性色| 三级电影一区| www色aa色aawww| 精品亚洲第一| 日本一二三区在线视频| 看黄的a网站| 电影天堂最新网址| 欧美另类视频在线观看| 国产精品1000部啪视频| 丝袜美腿一区二区三区动态图| 国产淫片av片久久久久久| 天天射综合网站| 国产白浆在线观看| 在线播放国产精品| 欧美久久久一区| 中文字字幕在线中文乱码电影| 久久久9999久久精品小说| 91成人在线免费| 精品久久精品| 啊v视频在线一区二区三区| 欧美日韩日本国产亚洲在线| 日韩电影免费观看高清完整版在线观看| 欧美精品videosex性欧美| 欧美日韩一区二区三区四区五区| 久久99热99| 亚欧精品一区二区三区| 忘忧草在线www成人影院| 色在线中文字幕| 深夜福利网站在线观看| 久久精品夜夜夜夜久久| 女人高潮一级片| 黄色在线观看免费| 五月婷中文字幕| 91精品欧美久久久久久动漫| 国产奶头好大揉着好爽视频| 天天操夜夜操视频| 欲求不满中文字幕| 91精品久久久久久蜜桃| 国产婷婷97碰碰久久人人蜜臀| 战狼4完整免费观看在线播放版| 国产农村妇女精品久久| а√中文在线8| 免费在线观看毛片网站| 妞干网在线观看视频| 黄页视频在线91| 欧美一级高清免费播放| 女人被狂躁到高潮视频免费网站| 国产精品一区高清| 午夜免费视频在线国产| 激情六月婷婷久久| 国产精品不卡一区二区三区在线观看| 亚洲国产精品一区二区久久hs| 日本中文在线| 欧美日韩最好看的视频| 美国一级片在线免费观看视频| 丝袜足脚交91精品| 亚洲欧美视频一区二区| 国产又爽又黄又舒服又刺激视频| 亚洲婷婷在线视频| 91精品国产乱码久久久竹菊| 欧美69wwwcom| 午夜啪啪小视频| 成人午夜电影小说| 成人中文字幕在线播放| 精品一区二区三区无码视频| 天天草天天干| 亚洲色欲色欲www| 久久先锋资源| 青青青青国产视频| 亚洲男人天堂2024| 欧美黑人一区二区| 亚洲va天堂va国产va久| 国产精品91一区二区| 欧美一区二区三区免费看| 亚洲黄页在线观看| 亚洲激情第一页| 欧美精品国产精品日韩精品| 国产精品嫩草影院俄罗斯| 亚洲精品色婷婷福利天堂| 一级二级三级在线观看| 亚洲免费在线视频观看| 亚洲国产精品成人久久综合一区| 欧美日韩在线观看一区二区三区| 少妇又色又爽又黄的视频| 精品福利影院| 久久艹这里只有精品| 国产91精品网站| 亚洲国产精品自拍视频| 999久久久久久久久6666| 亚洲高清免费在线| 日本a人精品| 中文字幕欧美人妻精品| 情趣视频在线观看| 东北少妇不带套对白| 小次郎av收藏家| 亚洲一区二区免费视频软件合集| 精品无人区乱码1区2区3区免费| 日韩在线卡一卡二| 国产精品一区二三区| 欧美亚洲国产精品| 成人午夜在线视频| 亚洲精品中文字幕女同| 一区二区三区视频在线观看视频| 精品国产高清自在线一区二区三区| 久久久久久亚洲精品杨幂换脸| 精品麻豆剧传媒av国产九九九| 一级全黄少妇性色生活片| 欧美在线观看日本一区| 人人草在线观看| 黄色永久免费网站| 懂色av成人一区二区三区| 久久久精品中文字幕麻豆发布| 911精品产国品一二三产区| 亚洲女人天堂| 久久99亚洲网美利坚合众国| 中文字幕亚洲精品乱码| 男人舔女人下面高潮视频| 久久嫩草精品久久久久| 中文av免费观看| av成人国产| 日韩精品www| 国产精品久久久久久久牛牛| 国产九九在线| 国产精品久久久久77777| 国产精品永久| 国产成人一级电影| 一本大道香蕉久久| 日韩国产高清一区| 中国丰满人妻videoshd| 精品一区二区成人免费视频| 日韩精品国产精品| 国产网友自拍视频| 成人性生交大合| 成人激情电影在线| 成人一级视频在线观看| 青青草国产精品视频| 欧美日韩一区成人| 一级黄色录像免费看| 日本在线播放一二三区| 欧美日韩国产综合在线| 四虎影视最新网址| 日本一区二区三区在线免费观看| 50路60路老熟妇啪啪| 97一区二区国产好的精华液| 日本妇乱大交xxxxx| 久久中文字幕导航| 色噜噜狠狠成人中文综合| 成人在线电影在线观看视频| 中文字幕亚洲情99在线| 性囗交免费视频观看| 日韩激情视频在线播放| 成人精品视频在线| 日韩精品中文字幕一区二区三区| 国产精品久久久精品四季影院|