久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第11章 Go语言文件处理

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第11章 Go语言文件处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本章我們將帶領大家深入了解一下 Go語言中的文件處理,重點在于文件而非目錄或者通用的文件系統,特別是如何讀寫標準格式(如 XML 和 JSON 格式)的文件以及自定義的純文本和二進制格式文件。

由于前面的內容已覆蓋 Go語言的所有特性,現在我們可以靈活地使用 Go語言提供的所有工具。我們會充分利用這種靈活性并利用閉包來避免重復性的代碼,同時在某些情況下充分利用 Go語言對面向對象的支持,特別是對為函數添加方法的支持。

本章內容:

11.1?Go語言自定義數據文件

對一個程序非常普遍的需求包括維護內部數據結構,為數據交換提供導入導出功能,也支持使用外部工具來處理數據。

由于我們這里的關注重點是文件處理,因此我們純粹只關心如何從程序內部數據結構中讀取數據并將其寫入標準和自定義格式的文件中,以及如何從標準和自定義格式文件中讀取數據并寫入程序的內部數據結構中。

本節中,我們會為所有的例子使用相同的數據,以便直接比較不同的文件格式。所有的代碼都來自 invoicedate 程序(在 invoicedata 目錄中的 invoicedata.go > gob.go、inv.go、jsn.go、txt.go 和 xml.go 等文件中)。大家可以從我的網盤(鏈接:?https://pan.baidu.com/s/1j22QfIScihrauVCVFV6MWw?提取碼: ajrk)下載相關的代碼。

該程序接受兩個文件名作為命令行參數,一個用于讀,另一個用于寫(它們必須是不同的文件)。程序從第一個文件中讀取數據(以其后綴所表示的任何格式),并將數據寫入第二個文件(也是以其后綴所表示的任何格式)。

由 invoicedata 程序創建的文件可跨平臺使用,也就是說,無論是什么格式,Windows 上創建的文件都可在 Mac OS X 以及 Linux 上讀取,反之亦然。Gzip 格式壓縮的文件(如 invoices.gob.gz)可以無縫讀寫。

這些數據由一個 []invoice 組成,也就是說,是一個保存了指向 Invoice 值的指針的切片。每一個發票數據都保存在一個 invoice 類型的值中,同時每一個發票數據都以 []*Item 的形式保存著 0 個或者多個項。

  • type Invoice struct {
  • Id int
  • Customerld int
  • Raised time.Time
  • Due time.Time
  • Paid bool
  • Note string
  • Items []*Item
  • }
  • ?
  • type Item struct {
  • Id st ring
  • Price float64
  • Quantity int
  • Note string
  • }
  • 這兩個結構體用于保存數據。下表給出了一些非正式的對比,展示了每種格式下讀寫相同的 50000 份隨機發票數據所需的時間,以及以該格式所存儲文件的大小。

    計時按秒計,并向上舍入到最近的十分之一秒。我們應該把計時結果認為是無絕對單位的,因為不同硬件以及不 同負載情況下該值都不盡相同。大小一欄以千字節(KB)算,該值在所有機器上應該都是相同的。

    對于該數據集,雖然未壓縮文件的大小千差萬別,但壓縮文件的大小都驚人的相似。而代碼的 函數不包括所有格式通用的代碼(例如,那些用于壓縮和解壓縮以及定義結構體的代碼)。
    ?

    表:各種格式的速度以及大小對比

    后綴讀取寫入大小(KiB)讀/寫LOC格式
    .gob0.30.2794821 + 11 =32Go二進制
    .gob.gz0.51.52589
    jsn4.52.21628332+17 = 49JSON
    .jsn.gz4.53.42678
    .xml6.71.21891745 + 30 = 75XML
    .xml.gz6.92.72730
    ..txt1.91.01237586 + 53 = 139純文本(UTF-8)
    .txt.gz2.22.22514
    .inv1.73.57250128 + 87 = 215自定義二進制
    .inv.gz1.62.62400


    這些讀寫時間和文件大小在我們的合理預期范圍內,除了純文本格式的讀寫異常快之外。這得益于 fmt 包優秀的打印和掃描函數,以及我們設計的易于解析的自定義文本格式。

    對于 JSON 和 XML 格式,我們只簡單地存儲了日期部分而非存儲默認的 time.Time 值(一個 ISO-8601 日期/時間字符串),通過犧牲一些速度和增加一些額外代碼稍微減小了文件的大小。

    例如,如果讓JSON代碼自己來處理time.Time值,它能夠運行得更快,并且其代碼行數與 Go語言二進制編碼差不多。

    對于二進制數據,Go語言的二進制格式是最便于使用的。它非常快且極端緊湊,所需的代碼非常少,并且相對容易適應數據的變化。然而,如果我們使用的自定義類型不原生支持 gob 編碼,我們必須讓該類型滿足 gob.Encoder 和 gob. Decoder 接口,這樣會導致 gob 格式的 讀寫相當得慢,并且文件大小也會膨脹。

    對于可讀的數據,XML 可能是最好使用的格式,特別是作為一種數據交換格式時非常有用。與處理 JSON 格式相比,處理 XML 格式需要更多行代碼。這是因為 Go [沒有一個 xml.Marshaler 接口,也因為我們這里使用了并行的數據類型 (XMLInvoice 和 XMLItem)來幫助映射 XML 數據和發票數據(invoice 和 Item)。

    使用 XML 作為外部存儲格式的應用程序可能不需要并行的數據類型或者也不需要 invoicedata 程序這樣的 轉換,因此就有可能比 invoicedata 例子中所給出的更快,并且所需的代碼也更少。

    除了讀寫速度和文件大小以及代碼行數之外,還有另一個問題值得考慮:格式的穩健性。例如,如果我們為 Invoice 結構體和 Item 結構體添加了一個字段,那么就必須再改變文件的格式。我們的代碼適應讀寫新格式并繼續支持讀舊格式的難易程度如何?如果我們為文件格式定義版本,這樣的變化就很容易被適應(會以本章一個練習的形式給岀),除了讓 JSON 格式同時適應讀寫新舊格式稍微復雜一點之外。

    除了 Invoice 和 Item 結構體之外,所有文件格式都共享以下常量:

  • const (
  • fileType = "INVOICES" //用于純文本格式
  • magicNumber = 0xl25D // 用于二進制格式
  • fileVersion = 100 //用于所有的格式
  • dataFormat = "2006-01-02" //必須總是使用該日期
  • magicNumber 用于唯一標記發票文件。fileVersion 用于標記發票文件的版本,該標記便于之后修改程序來適應數據格式的改變。dataFormat 稍后介紹,它表 示我們希望數據如何按照可讀的格式進行格式化。

    同時,我們也創建了一對接口。

  • type InvoiceMarshaler interface {
  • Marshallnvoices(writer io.Writer, invoices []*Invoice) error
  • }
  • type InvoiceUnmarshaler interface {
  • Unmarshallnvoices(reader io.Reader) ([]*Invoice, error)
  • }
  • 這樣做的目的是以統一的方式針對特定格式使用 reader 和 writer。例如,下列函數是 invoicedata 程序用來從一個打開的文件中讀取發票數據的。

  • func readinvoices(reader io.Reader, suffix string)([]*Invoice, error) {
  • var unmarshaler InvoicesUnmarshaler
  • switch suffix {
  • case ".gobn:
  • unmarshaler = GobMarshaler{}
  • case H.inv":
  • unmarshaler = InvMarshaler{}
  • case ,f. jsn", H. jsonn:
  • unmarshaler = JSONMarshaler{}
  • case ".txt”:
  • unmarshaler = TxtMarshaler{}
  • case ".xml":
  • unmarshaler = XMLMarshaler{}
  • }
  • if unmarshaler != nil {
  • return unmarshaler.Unmarshallnvoices(reader)
  • }
  • return nil, fmt.Errorf("unrecognized input suffix: %s", suffix)
  • }
  • 其中,reader 是任何能夠滿足 io.Reader 接口的值,例如,一個打開的文件 ( 其類型為 *os . File)> 一個 gzip 解碼器 ( 其類型為 *gzip. Reader) 或者一個 string. Readero 字符串 suffix 是文件的后綴名 ( 從 .gz 文件中解壓之后)。

    在接下來的小節中我們將會看到 GobMarshaler 和 InvMarshaler 等自定義的類型,它們提供了 MarshmlTnvoices() 和 Unmarshallnvoices() 方法 (因此滿足 InvoicesMarshaler 和 InvoicesUnmarshaler 接口)。

    11.2?Go語言JSON文件的讀寫操作

    JSON(JavaScript?Object Notation)是一種輕量級的數據交換格式,易于閱讀和編寫,同時也易于機器解析和生成。它基于?JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一個子集。

    JSON 是一種使用 UTF-8 編碼的純文本格式,采用完全獨立于語言的文本格式,由于寫起來比 XML 格式方便,并且更為緊湊,同時所需的處理時間也更少,致使 JSON 格式越來越流行,特別是在通過網絡連接傳送數據方面。

    開發人員可以使用 JSON 傳輸簡單的字符串、數字、布爾值,也可以傳輸一個數組或者一個更復雜的復合結構。在 Web 開發領域中,JSON 被廣泛應用于 Web 服務端程序和客戶端之間的數據通信。

    Go語言內建對 JSON 的支持,使用內置的 encoding/json 標準庫,開發人員可以輕松使用Go程序生成和解析 JSON 格式的數據。

    JSON 結構如下所示:

    {"key1":"value1","key2":value2,"key3":["value3","value4","value5"]}

    寫 JSON 文件

    使用Go語言創建一個 json 文件非常方便,示例代碼如下:

  • package main
  • ?
  • import (
  • ??? "encoding/json"
  • ??? "fmt"
  • ??? "os"
  • )
  • ?
  • type Website struct {
  • ??? Name?? string `xml:"name,attr"`
  • ??? Url??? string
  • ??? Course []string
  • }
  • ?
  • func main() {
  • ??? info := []Website{{"Golang", "http://c.biancheng.net/golang/", []string{"http://c.biancheng.net/cplus/", "http://c.biancheng.net/linux_tutorial/"}}, {"Java", "http://c.biancheng.net/java/", []string{"http://c.biancheng.net/socket/", "http://c.biancheng.net/python/"}}}
  • ?
  • ??? // 創建文件
  • ??? filePtr, err := os.Create("info.json")
  • ??? if err != nil {
  • ??????? fmt.Println("文件創建失敗", err.Error())
  • ??????? return
  • ??? }
  • ??? defer filePtr.Close()
  • ?
  • ??? // 創建Json編碼器
  • ??? encoder := json.NewEncoder(filePtr)
  • ?
  • ??? err = encoder.Encode(info)
  • ??? if err != nil {
  • ??????? fmt.Println("編碼錯誤", err.Error())
  • ?
  • ??? } else {
  • ??????? fmt.Println("編碼成功")
  • ??? }
  • }
  • 運行上面的代碼會在當前目錄下生成一個 info.json 文件,文件內容如下:

    [
    ??? {
    ??????? "Name":"Golang",
    ??????? "Url":"http://c.biancheng.net/golang/",
    ??????? "Course":[
    ??????????? "http://c.biancheng.net/golang/102/",
    ??????????? "http://c.biancheng.net/golang/concurrent/"
    ??????? ]
    ??? },
    ??? {
    ??????? "Name":"Java",
    ??????? "Url":"http://c.biancheng.net/java/",
    ??????? "Course":[
    ??????????? "http://c.biancheng.net/java/10/",
    ??????????? "http://c.biancheng.net/python/"
    ??????? ]
    ??? }
    ]

    讀 JSON 文件

    讀 JSON 數據與寫 JSON 數據一樣簡單,示例代碼如下:

  • package main
  • ?
  • import (
  • ??? "encoding/json"
  • ??? "fmt"
  • ??? "os"
  • )
  • ?
  • type Website struct {
  • ??? Name?? string `xml:"name,attr"`
  • ??? Url??? string
  • ??? Course []string
  • }
  • ?
  • func main() {
  • ??? filePtr, err := os.Open("./info.json")
  • ??? if err != nil {
  • ??????? fmt.Println("文件打開失敗 [Err:%s]", err.Error())
  • ??????? return
  • ??? }
  • ??? defer filePtr.Close()
  • ??? var info []Website
  • ??? // 創建json解碼器
  • ??? decoder := json.NewDecoder(filePtr)
  • ??? err = decoder.Decode(&info)
  • ??? if err != nil {
  • ??????? fmt.Println("解碼失敗", err.Error())
  • ??? } else {
  • ??????? fmt.Println("解碼成功")
  • ??????? fmt.Println(info)
  • ??? }
  • }
  • 運行結果如下:

    go run main.go
    解碼成功
    [{Golang http://c.biancheng.net/golang/ [http://c.biancheng.net/golang/102/ http://c.biancheng.net/golang/concurrent/]} {Java http://c.biancheng.net/java/ [http://c.biancheng.net/java/10/ http://c.biancheng.net/python/]}]

    順便提一下,還有一種叫做 BSON (Binary JSON) 的格式與 JSON 非常類似,與 JSON 相比,BSON 著眼于提高存儲和掃描效率。BSON 文檔中的大型元素以長度字段為前綴以便于掃描。在某些情況下,由于長度前綴和顯式數組索引的存在,BSON 使用的空間會多于 JSON。

    11.3?Go語言XML文件的讀寫操作

    XML(extensible Markup Language)格式被廣泛用作一種數據交換格式,并且自成一種文件格式。與上一節介紹的?JSON?相比 XML 要復雜得多,而且手動寫起來相對乏味得多。

    在 JSON 還未像現在這么廣泛使用時,XML 的使用相當廣泛。XML 作為一種數據交換和信息傳遞的格式,使用還是很廣泛的,現在很多開放平臺接口,基本都會支持 XML 格式。

    Go語言內置的 encoding/xml 包可以用在結構體和 XML 格式之間進行編解碼,其方式跟 encoding/json 包類似。然而與 JSON 相比 XML 的編碼和解碼在功能上更苛刻得多,這是由于 encoding/xml 包要求結構體的字段包含格式合理的標簽,而 JSON 格式卻不需要。

    寫 XML 文件

    使用 encoidng/xml 包可以很方便的將 xml 數據存儲到文件中,示例代碼如下:

  • package main
  • ?
  • import (
  • ??? "encoding/xml"
  • ??? "fmt"
  • ??? "os"
  • )
  • ?
  • type Website struct {
  • ??? Name?? string `xml:"name,attr"`
  • ??? Url??? string
  • ??? Course []string
  • }
  • ?
  • func main() {
  • ??? //實例化對象
  • ??? info := Website{"C語言中文網", "http://c.biancheng.net/golang/", []string{"Go語言入門教程", "Golang入門教程"}}
  • ??? f, err := os.Create("./info.xml")
  • ??? if err != nil {
  • ??????? fmt.Println("文件創建失敗", err.Error())
  • ??????? return
  • ??? }
  • ??? defer f.Close()
  • ??? //序列化到文件中
  • ??? encoder := xml.NewEncoder(f)
  • ??? err = encoder.Encode(info)
  • ??? if err != nil {
  • ??????? fmt.Println("編碼錯誤:", err.Error())
  • ??????? return
  • ??? } else {
  • ??????? fmt.Println("編碼成功")
  • ??? }
  • }
  • 運行上面的代碼會在當前目錄生成一個 info.xml 文件,文件的內容如下所示:

    <Website name="C語言中文網">
    ??? <Url>http://c.biancheng.net/golang/</Url>
    ??? <Course>Go語言入門教程</Course>
    ??? <Course>Golang入門教程</Course>
    </Website>

    讀 XML 文件

    讀 XML 文件比寫 XML 文件稍微復雜,特別是在必須處理一些我們自定義字段的時候(例如日期)。但是,如果我們使用合理的打上 XML 標簽的結構體,就不會復雜。示例代碼如下:

  • package main
  • ?
  • import (
  • ??? "encoding/xml"
  • ??? "fmt"
  • ??? "os"
  • )
  • ?
  • type Website struct {
  • ??? Name?? string `xml:"name,attr"`
  • ??? Url??? string
  • ??? Course []string
  • }
  • ?
  • func main() {
  • ??? //打開xml文件
  • ??? file, err := os.Open("./info.xml")
  • ??? if err != nil {
  • ??????? fmt.Printf("文件打開失敗:%v", err)
  • ??????? return
  • ??? }
  • ??? defer file.Close()
  • ?
  • ??? info := Website{}
  • ??? //創建 xml 解碼器
  • ??? decoder := xml.NewDecoder(file)
  • ??? err = decoder.Decode(&info)
  • ??? if err != nil {
  • ??????? fmt.Printf("解碼失敗:%v", err)
  • ??????? return
  • ??? } else {
  • ??????? fmt.Println("解碼成功")
  • ??????? fmt.Println(info)
  • ??? }
  • }
  • 運行結果如下:

    go run main.go
    解碼成功
    {C語言中文網 http://c.biancheng.net/golang/ [Go語言入門教程 Golang入門教程]}

    正如寫 XML 時一樣,我們無需關心對所讀取的 XML 數據進行轉義,xml.NewDecoder.Decode() 函數會自動處理這些。

    xml 包還支持更為復雜的標簽,包括嵌套。例如標簽名為 'xml:"Books>Author"' 產生的是 <Books><Author>content</Author></Books> 這樣的 XML 內容。同時除了 'xml:", attr"' 之外,該包還支持 'xml:",chardata"' 這樣的標簽表示將該字段當做字符數據來寫,支持 'xml:",innerxml"' 這樣的標簽表示按照字面量來寫該字段,以及 'xml:",comment"' 這樣的標簽表示將該字段當做 XML 注釋。因此,通過使用標簽化的結構體,我們可以充分利用好這些方便的編碼解碼函數,同時合理控制如何讀寫 XML 數據。

    11.4?Go語言使用Gob傳輸數據

    為了讓某個數據結構能夠在網絡上傳輸或能夠保存至文件,它必須被編碼然后再解碼。當然已經有許多可用的編碼方式了,比如?JSON、XML、Google 的 protocol buffers 等等。而現在又多了一種,由Go語言 encoding/gob 包提供的方式。

    Gob 是Go語言自己以二進制形式序列化和反序列化程序數據的格式,可以在 encoding 包中找到。這種格式的數據簡稱為 Gob(即 Go binary 的縮寫)。類似于?Python?的“pickle”和?Java的“Serialization”。

    Gob 和 JSON 的 pack 之類的方法一樣,由發送端使用 Encoder 對數據結構進行編碼。在接收端收到消息之后,接收端使用 Decoder 將序列化的數據變化成本地變量。

    Go語言可以通過 JSON 或 Gob 來序列化 struct 對象,雖然 JSON 的序列化更為通用,但利用 Gob 編碼可以實現 JSON 所不能支持的 struct 的方法序列化,利用 Gob 包序列化 struct 保存到本地也十分簡單。

    Gob 不是可外部定義、語言無關的編碼方式,它的首選的是二進制格式,而不是像 JSON 或 XML 那樣的文本格式。Gob 并不是一種不同于 Go 的語言,而是在編碼和解碼過程中用到了 Go 的反射。

    Gob 通常用于遠程方法調用參數和結果的傳輸,以及應用程序和機器之間的數據傳輸。它和 JSON 或 XML 有什么不同呢?Gob 特定的用于純 Go 的環境中,例如兩個用Go語言寫的服務之間的通信。這樣的話服務可以被實現得更加高效和優化。

    Gob 文件或流是完全自描述的,它里面包含的所有類型都有一個對應的描述,并且都是可以用Go語言解碼,而不需要了解文件的內容。

    只有可導出的字段會被編碼,零值會被忽略。在解碼結構體的時候,只有同時匹配名稱和可兼容類型的字段才會被解碼。當源數據類型增加新字段后,Gob 解碼客戶端仍然可以以這種方式正常工作。解碼客戶端會繼續識別以前存在的字段,并且還提供了很大的靈活性,比如在發送者看來,整數被編碼成沒有固定長度的可變長度,而忽略具體的 Go 類型。

    假如有下面這樣一個結構體 T:

    type T struct { X, Y, Z int }
    var t = T{X: 7, Y: 0, Z: 8}

    而在接收時可以用一個結構體 U 類型的變量 u 來接收這個值:

    type U struct { X, Y *int8 }
    var u U

    在接收時,X 的值是 7,Y 的值是 0(Y 的值并沒有從 t 中傳遞過來,因為它是零值)和 JSON 的使用方式一樣,Gob 使用通用的 io.Writer 接口,通過 NewEncoder() 函數創建 Encoder 對象并調用 Encode(),相反的過程使用通用的 io.Reader 接口,通過 NewDecoder() 函數創建 Decoder 對象并調用 Decode 。

    創建 gob 文件

    下面通過簡單的示例程序來演示Go語言是如何創建 gob 文件的,代碼如下所示:

  • package main
  • ?
  • import (
  • "encoding/gob"
  • "fmt"
  • "os"
  • )
  • ?
  • func main() {
  • info := map[string]string{
  • "name": "C語言中文網",
  • "website": "http://c.biancheng.net/golang/",
  • }
  • name := "demo.gob"
  • File, _ := os.OpenFile(name, os.O_RDWR|os.O_CREATE, 0777)
  • defer File.Close()
  • enc := gob.NewEncoder(File)
  • if err := enc.Encode(info); err != nil {
  • fmt.Println(err)
  • }
  • }
  • 運行上面的代碼會在當前目錄下生成 demo.gob 文件,文件的內容如下所示:

    0eff 8104 0102 ff82 0001 0c01 0c00 0041
    ff82 0002 046e 616d 6510 43e8 afad e8a8
    80e4 b8ad e696 87e7 bd91 0777 6562 7369
    7465 1e68 7474 703a 2f2f 632e 6269 616e
    ... ...

    讀取 gob 文件

    讀取 gob 文件與創建 gob 文件同樣簡單,示例代碼如下:

  • package main
  • ?
  • import (
  • "encoding/gob"
  • "fmt"
  • "os"
  • )
  • ?
  • func main() {
  • var M map[string]string
  • File, _ := os.Open("demo.gob")
  • D := gob.NewDecoder(File)
  • D.Decode(&M)
  • fmt.Println(M)
  • }
  • 運行結果如下:

    go run main.go
    map[name:C語言中文網 website:http://c.biancheng.net/golang/]

    11.5?Go語言純文本文件的讀寫操作

    Go語言提供了很多文件操作的支持,在不同場景下,有對應的處理方式,本節我們來介紹一下文本文件的讀寫操作。

    寫純文本文件

    由于Go語言的 fmt 包中打印函數強大而靈活,寫純文本數據非常簡單直接,示例代碼如下所示:

  • package main
  • ?
  • import (
  • "bufio"
  • "fmt"
  • "os"
  • )
  • ?
  • func main() {
  • //創建一個新文件,寫入內容
  • filePath := "./output.txt"
  • file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
  • if err != nil {
  • fmt.Printf("打開文件錯誤= %v \n", err)
  • return
  • }
  • //及時關閉
  • defer file.Close()
  • //寫入內容
  • str := "http://c.biancheng.net/golang/\n" // \n\r表示換行 txt文件要看到換行效果要用 \r\n
  • //寫入時,使用帶緩存的 *Writer
  • writer := bufio.NewWriter(file)
  • for i := 0; i < 3; i++ {
  • writer.WriteString(str)
  • }
  • //因為 writer 是帶緩存的,因此在調用 WriterString 方法時,內容是先寫入緩存的
  • //所以要調用 flush方法,將緩存的數據真正寫入到文件中。
  • writer.Flush()
  • }
  • 運行上面代碼會在當前目錄下生成一個 output.txt 文件,文件內容如下:

    http://c.biancheng.net/golang/
    http://c.biancheng.net/golang/
    http://c.biancheng.net/golang/

    讀純文本文件

    打開并讀取一個純文本格式的數據跟寫入純文本格式數據一樣簡單。要解析文本來重建原始數據可能稍微復雜,這需根據格式的復雜性而定。

    示例代碼如下所示:

  • package main
  • ?
  • import (
  • "bufio"
  • "fmt"
  • "io"
  • "os"
  • )
  • ?
  • func main() {
  • //打開文件
  • file, err := os.Open("./output.txt")
  • if err != nil {
  • fmt.Println("文件打開失敗 = ", err)
  • }
  • //及時關閉 file 句柄,否則會有內存泄漏
  • defer file.Close()
  • //創建一個 *Reader , 是帶緩沖的
  • reader := bufio.NewReader(file)
  • for {
  • str, err := reader.ReadString('\n') //讀到一個換行就結束
  • if err == io.EOF { //io.EOF 表示文件的末尾
  • break
  • }
  • fmt.Print(str)
  • }
  • fmt.Println("文件讀取結束...")
  • }
  • 運行結果如下:

    go run main.go
    http://c.biancheng.net/golang/
    http://c.biancheng.net/golang/
    http://c.biancheng.net/golang/
    文件讀取結束...

    11.6?Go語言二進制文件的讀寫操作

    Go語言的二進制(gob)格式是一個自描述的二進制序列。從其內部表示來看,Go語言的二進制格式由一個 0 塊或者更多塊的序列組成,其中的每一塊都包含一個字節數,一個由 0 個或者多個 typeId-typeSpecification 對組成的序列,以及一個 typeId-value 對。

    如果 typeId-value 對的 typeId 是預先定義好的(例如 bool、int 和 string 等),則這些 typeId-typeSpecification 對可以省略。否則就用類型對來描述一個自定義類型(如一個自定義的結構體)。類型對和值對之間的 typeId 沒有區別。

    正如我們將看到的,我們無需了解其內部結構就可以使用 gob 格式, 因為 encoding/gob 包會在幕后為我們打理好一切底層細節。

    Go語言中的 encoding/gob 包也提供了與 encoding/json 包一樣的編碼解碼功能,并且容易使用。通常而言如果對肉眼可讀性不做要求,gob 格式是Go語言上用于文件存儲和網絡傳輸最為方便的格式。

    寫Go語言二進制文件

    下面通過一個簡單的示例來演示一下Go語言是如何生成一個二進制文件的,代碼如下所示:

  • package main
  • ?
  • import (
  • "encoding/gob"
  • "fmt"
  • "os"
  • )
  • ?
  • func main() {
  • info := "http://c.biancheng.net/golang/"
  • file, err := os.Create("./output.gob")
  • if err != nil {
  • fmt.Println("文件創建失敗", err.Error())
  • return
  • }
  • defer file.Close()
  • ?
  • encoder := gob.NewEncoder(file)
  • err = encoder.Encode(info)
  • if err != nil {
  • fmt.Println("編碼錯誤", err.Error())
  • return
  • } else {
  • fmt.Println("編碼成功")
  • }
  • }
  • 運行上面的代碼會在當前目錄下生成一個 output.gob 文件,文件內容如下所示:

    210c 001e 6874 7470 3a2f 2f63 2e62 6961
    6e63 6865 6e67 2e6e 6574 2f67 6f6c 616e
    672f?

    讀Go語言二進制文件

    讀 gob 數據和寫一樣簡單,示例代碼如下:

  • package main
  • ?
  • import (
  • "encoding/gob"
  • "fmt"
  • "os"
  • )
  • ?
  • func main() {
  • file, err := os.Open("./output.gob")
  • if err != nil {
  • fmt.Println("文件打開失敗", err.Error())
  • return
  • }
  • defer file.Close()
  • ?
  • decoder := gob.NewDecoder(file)
  • info := ""
  • err = decoder.Decode(&info)
  • if err != nil {
  • fmt.Println("解碼失敗", err.Error())
  • } else {
  • fmt.Println("解碼成功")
  • fmt.Println(info)
  • }
  • }
  • 運行結果如下:

    go run main.go
    解碼成功
    http://c.biancheng.net/golang/

    11.7?Go語言自定義二進制文件的讀寫操作

    雖然Go語言的 encoding/gob 包非常易用,而且使用時所需代碼量也非常少,但是我們仍有可能需要創建自定義的二進制格式。自定義的二進制格式有可能做到最緊湊的數據表示,并且讀寫速度可以非常快。

    不過,在實際使用中,我們發現以Go語言二進制格式的讀寫通常比自定義格式要快非常多,而且創建的文件也不會大很多。但如果我們必須通過滿足 gob.GobEncoder 和 gob.GobDecoder 接口來處理一些不可被 gob 編碼的數據,這些優勢就有可能會失去。

    在有些情況下我們可能需要與一些使用自定義二進制格式的軟件交互,因此了解如何處理二進制文件就非常有用。

    寫自定義二進制文件

    Go語言的 encoding/binary 包中的 binary.Write() 函數使得以二進制格式寫數據非常簡單,函數原型如下:

    func Write(w io.Writer, order ByteOrder, data interface{}) error

    Write 函數可以將參數 data 的 binary 編碼格式寫入參數 w 中,參數 data 必須是定長值、定長值的切片、定長值的指針。參數 order 指定寫入數據的字節序,寫入結構體時,名字中有_的字段會置為 0。

    下面通過一個簡單的示例程序來演示一下 Write 函數的使用,示例代碼如下:

  • package main
  • ?
  • import (
  • "bytes"
  • "encoding/binary"
  • "fmt"
  • "os"
  • )
  • ?
  • type Website struct {
  • Url int32
  • }
  • ?
  • func main() {
  • file, err := os.Create("output.bin")
  • for i := 1; i <= 10; i++ {
  • info := Website{
  • int32(i),
  • }
  • if err != nil {
  • fmt.Println("文件創建失敗 ", err.Error())
  • return
  • }
  • defer file.Close()
  • ?
  • var bin_buf bytes.Buffer
  • binary.Write(&bin_buf, binary.LittleEndian, info)
  • b := bin_buf.Bytes()
  • _, err = file.Write(b)
  • ?
  • if err != nil {
  • fmt.Println("編碼失敗", err.Error())
  • return
  • }
  • }
  • fmt.Println("編碼成功")
  • }
  • 運行上面的程序會在當前目錄下生成 output.bin 文件,文件內容如下:

    0100 0000 0200 0000 0300 0000 0400 0000
    0500 0000 0600 0000 0700 0000 0800 0000
    0900 0000 0a00 0000?

    讀自定義二進制文件

    讀取自定義的二進制數據與寫自定義二進制數據一樣簡單。我們無需解析這類數據,只需使用與寫數據時相同的字節順序將數據讀進相同類型的值中。

    示例代碼如下:

  • package main
  • ?
  • import (
  • "bytes"
  • "encoding/binary"
  • "fmt"
  • "os"
  • )
  • ?
  • type Website struct {
  • Url int32
  • }
  • ?
  • func main() {
  • file, err := os.Open("output.bin")
  • defer file.Close()
  • if err != nil {
  • fmt.Println("文件打開失敗", err.Error())
  • return
  • }
  • m := Website{}
  • for i := 1; i <= 10; i++ {
  • data := readNextBytes(file, 4)
  • buffer := bytes.NewBuffer(data)
  • err = binary.Read(buffer, binary.LittleEndian, &m)
  • if err != nil {
  • fmt.Println("二進制文件讀取失敗", err)
  • return
  • }
  • fmt.Println("第", i, "個值為:", m)
  • }
  • }
  • ?
  • func readNextBytes(file *os.File, number int) []byte {
  • bytes := make([]byte, number)
  • ?
  • _, err := file.Read(bytes)
  • if err != nil {
  • fmt.Println("解碼失敗", err)
  • }
  • ?
  • return bytes
  • }
  • 運行結果如下:

    go run main.go
    第 1 個值為: {1}
    第 2 個值為: {2}
    第 3 個值為: {3}
    第 4 個值為: {4}
    第 5 個值為: {5}
    第 6 個值為: {6}
    第 7 個值為: {7}
    第 8 個值為: {8}
    第 9 個值為: {9}
    第 10 個值為: {10}

    至此,我們完成了對自定義二進制數據的讀和寫操作。只要小心選擇表示長度的整數符號和大小,并將該長度值寫在變長值(如切片)的內容之前,那么使用二進制數據進行工作并不難。

    Go語言對二進制文件的支持還包括隨機訪問。這種情況下,我們必須使用 os.OpenFile() 函數來打開文件(而非 os.Open()),并給它傳入合理的權限標志和模式(例如 os.O_RDWR 表示可讀寫)參數。

    然后,就可以使用 os.File.Seek() 方法來在文件中定位并讀寫,或者使用 os.File.ReadAt() 和 os.File.WriteAt() 方法來從特定的字節偏移中讀取或者寫入數據。

    Go語言還提供了其他常用的方法,包括 os.File.Stat() 方法,它返回的 os.FileInfo 包含了文件大小、權限以及日期時間等細節信息。

    11.8?Go語言zip歸檔文件的讀寫操作

    Go語言的標準庫提供了對幾種壓縮格式的支持,其中包括 gzip,因此 Go 程序可以無縫地讀寫 .gz 擴展名的 gzip 壓縮文件或非 .gz 擴展名的非壓縮文件。此外標準庫也提供了讀和寫 .zip 文件、tar 包文件(.tar 和 .tar.gz),以及讀 .bz2 文件(即 .tar .bz2 文件)的功能。

    本節我們將主要介紹 zip 歸檔文件的讀寫操作。

    創建 zip 歸檔文件

    Go語言提供了?archive/zip 包來操作壓縮文件,下面通過一個簡單的的示例演示如何使用Go語言來創建一個 zip 文件,示例代碼如下:

  • package main
  • ?
  • import (
  • "archive/zip"
  • "bytes"
  • "fmt"
  • "os"
  • )
  • ?
  • func main() {
  • // 創建一個緩沖區用來保存壓縮文件內容
  • buf := new(bytes.Buffer)
  • ?
  • // 創建一個壓縮文檔
  • w := zip.NewWriter(buf)
  • ?
  • // 將文件加入壓縮文檔
  • var files = []struct {
  • Name, Body string
  • }{
  • {"Golang.txt", "http://c.biancheng.net/golang/"},
  • }
  • for _, file := range files {
  • f, err := w.Create(file.Name)
  • if err != nil {
  • fmt.Println(err)
  • }
  • _, err = f.Write([]byte(file.Body))
  • if err != nil {
  • fmt.Println(err)
  • }
  • }
  • ?
  • // 關閉壓縮文檔
  • err := w.Close()
  • if err != nil {
  • fmt.Println(err)
  • }
  • ?
  • // 將壓縮文檔內容寫入文件
  • f, err := os.OpenFile("file.zip", os.O_CREATE|os.O_WRONLY, 0666)
  • if err != nil {
  • fmt.Println(err)
  • }
  • buf.WriteTo(f)
  • }
  • 運行上面的文件會在當前目錄下生成 file.zip 文件,如下圖所示:
    ?


    圖:生成的壓縮文件及文件的內容

    讀取 zip 歸檔文件

    讀取一個 .zip 歸檔文件與創建一個歸檔文件一樣簡單,只是如果歸檔文件中包含帶有路徑的文件名,就必須重建目錄結構。

    示例代碼如下所示:

  • package main
  • ?
  • import (
  • "archive/zip"
  • "fmt"
  • "io"
  • "os"
  • )
  • ?
  • func main() {
  • // 打開一個zip格式文件
  • r, err := zip.OpenReader("file.zip")
  • if err != nil {
  • fmt.Printf(err.Error())
  • }
  • defer r.Close()
  • ?
  • // 迭代壓縮文件中的文件,打印出文件中的內容
  • for _, f := range r.File {
  • fmt.Printf("文件名: %s\n", f.Name)
  • rc, err := f.Open()
  • if err != nil {
  • fmt.Printf(err.Error())
  • }
  • _, err = io.CopyN(os.Stdout, rc, int64(f.UncompressedSize64))
  • if err != nil {
  • fmt.Printf(err.Error())
  • }
  • rc.Close()
  • }
  • }
  • 運行結果如下:

    go run main.go
    文件名: Golang.txt
    http://c.biancheng.net/golang/

    11.9?Go語言tar歸檔文件的讀寫操作

    在上一節《創建 .zip 歸檔文件》中我們介紹了 zip 歸檔文件的創建和讀取,那么接下來介紹一下 tar 歸檔文件的創建及讀取。

    創建 tar 歸檔文件

    tar 是一種打包格式,但不對文件進行壓縮,所以打包后的文檔一般遠遠大于 zip 和 tar.gz,因為不需要壓縮的原因,所以打包的速度是非常快的,打包時 CPU 占用率也很低。

    tar 的目的在于方便文件的管理,比如在我們的生活中,有很多小物品分散在房間的各個角落,為了方便整潔可以將這些零散的物品整理進一個箱子中,而 tar 的功能就類似這樣。

    創建 tar 歸檔文件與創建 .zip 歸檔文件非常類似,主要不同點在于我們將所有數據都寫入相同的 writer 中,并且在寫入文件的數據之前必須寫入完整的頭部,而非僅僅是一個文件名。

    tar 打包實現原理如下:

    • 創建一個文件 x.tar,然后向 x.tar 寫入 tar 頭部信息;
    • 打開要被 tar 的文件,向 x.tar 寫入頭部信息,然后向 x.tar 寫入文件信息;
    • 當有多個文件需要被 tar 時,重復第二步直到所有文件都被寫入到 x.tar 中;
    • 關閉 x.tar,完成打包。


    下面通過示例程序簡單演示一下Go語言 tar 打包的實現:

  • package main
  • ?
  • import (
  • "archive/tar"
  • "fmt"
  • "io"
  • "os"
  • )
  • ?
  • func main() {
  • f, err := os.Create("./output.tar") //創建一個 tar 文件
  • if err != nil {
  • fmt.Println(err)
  • return
  • }
  • defer f.Close()
  • ?
  • tw := tar.NewWriter(f)
  • defer tw.Close()
  • ?
  • fileinfo, err := os.Stat("./main.exe") //獲取文件相關信息
  • if err != nil {
  • fmt.Println(err)
  • }
  • hdr, err := tar.FileInfoHeader(fileinfo, "")
  • if err != nil {
  • fmt.Println(err)
  • }
  • ?
  • err = tw.WriteHeader(hdr) //寫入頭文件信息
  • if err != nil {
  • fmt.Println(err)
  • }
  • ?
  • f1, err := os.Open("./main.exe")
  • if err != nil {
  • fmt.Println(err)
  • return
  • }
  • m, err := io.Copy(tw, f1) //將main.exe文件中的信息寫入壓縮包中
  • if err != nil {
  • fmt.Println(err)
  • }
  • fmt.Println(m)
  • }
  • 運行上面的代碼會在當前目錄下生成一個 output.tar 文件,如下圖所示:
    ?


    圖:生成的 output.tar 文件

    解壓 tar 歸檔文件

    解壓 tar 歸檔文件比創建 tar 歸檔文檔稍微簡單些。首先需要將其打開,然后從這個 tar 頭部中循環讀取存儲在這個歸檔文件內的文件頭信息,從這個文件頭里讀取文件名,以這個文件名創建文件,然后向這個文件里寫入數據即可。

    示例代碼如下所示:

  • package main
  • ?
  • import (
  • "archive/tar"
  • "fmt"
  • "io"
  • "os"
  • )
  • ?
  • func main() {
  • f, err := os.Open("output.tar")
  • if err != nil {
  • fmt.Println("文件打開失敗", err)
  • return
  • }
  • defer f.Close()
  • r := tar.NewReader(f)
  • for hdr, err := r.Next(); err != io.EOF; hdr, err = r.Next() {
  • if err != nil {
  • fmt.Println(err)
  • return
  • }
  • fileinfo := hdr.FileInfo()
  • fmt.Println(fileinfo.Name())
  • f, err := os.Create("123" + fileinfo.Name())
  • if err != nil {
  • fmt.Println(err)
  • }
  • defer f.Close()
  • _, err = io.Copy(f, r)
  • if err != nil {
  • fmt.Println(err)
  • }
  • }
  • }
  • 運行上面的程序會將 tar 包的文件解壓到當前目錄中,如下圖所示:
    ?


    圖:解壓 tar 包


    至此,我們完成了對壓縮和歸檔文件及常規文件處理的介紹。Go語言使用 io.Reader、io.ReadCloser、io.Writer 和 io.WriteCloser 等接口處理文件的方式讓開發者可以使用相同的編碼模式來讀寫文件或者其他流(如網絡流或者甚至是字符串),從而大大降低了難度。

    11.10?Go語言使用buffer讀取文件

    buffer 是緩沖器的意思,Go語言要實現緩沖讀取需要使用到 bufio 包。bufio 包本身包裝了 io.Reader 和 io.Writer 對象,同時創建了另外的 Reader 和 Writer 對象,因此對于文本 I/O 來說,bufio 包提供了一定的便利性。

    buffer 緩沖器的實現原理就是,將文件讀取進緩沖(內存)之中,再次讀取的時候就可以避免文件系統的 I/O 從而提高速度。同理在進行寫操作時,先把文件寫入緩沖(內存),然后由緩沖寫入文件系統。

    使用 bufio 包寫入文件

    bufio 和 io 包中有很多操作都是相似的,唯一不同的地方是 bufio 提供了一些緩沖的操作,如果對文件 I/O 操作比較頻繁的,使用 bufio 包能夠提高一定的性能。

    在 bufio 包中,有一個 Writer 結構體,而其相關的方法支持一些寫入操作,如下所示。

  • //Writer 是一個空的結構體,一般需要使用 NewWriter 或者 NewWriterSize 來初始化一個結構體對象
  • type Writer struct {
  • // contains filtered or unexported fields
  • }
  • ?
  • //NewWriterSize 和 NewWriter 函數
  • //返回默認緩沖大小的 Writer 對象(默認是4096)
  • func NewWriter(w io.Writer) *Writer
  • ?
  • //指定緩沖大小創建一個 Writer 對象
  • func NewWriterSize(w io.Writer, size int) *Writer
  • ?
  • //Writer 對象相關的寫入數據的方法
  • ?
  • //把 p 中的內容寫入 buffer,返回寫入的字節數和錯誤信息。如果 nn < len(p),返回錯誤信息中會包含為什么寫入的數據比較短
  • func (b *Writer) Write(p []byte) (nn int, err error)
  • //將 buffer 中的數據寫入 io.Writer
  • func (b *Writer) Flush() error
  • ?
  • //以下三個方法可以直接寫入到文件中
  • //寫入單個字節
  • func (b *Writer) WriteByte(c byte) error
  • //寫入單個 Unicode 指針返回寫入字節數錯誤信息
  • func (b *Writer) WriteRune(r rune) (size int, err error)
  • //寫入字符串并返回寫入字節數和錯誤信息
  • func (b *Writer) WriteString(s string) (int, error)
  • 示例代碼如下所示:

  • package main
  • ?
  • import (
  • "bufio"
  • "fmt"
  • "os"
  • )
  • ?
  • func main() {
  • name := "demo.txt"
  • content := "http://c.biancheng.net/golang/"
  • ?
  • fileObj, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
  • if err != nil {
  • fmt.Println("文件打開失敗", err)
  • }
  • ?
  • defer fileObj.Close()
  • writeObj := bufio.NewWriterSize(fileObj, 4096)
  • ?
  • //使用 Write 方法,需要使用 Writer 對象的 Flush 方法將 buffer 中的數據刷到磁盤
  • buf := []byte(content)
  • if _, err := writeObj.Write(buf); err == nil {
  • if err := writeObj.Flush(); err != nil {
  • panic(err)
  • }
  • fmt.Println("數據寫入成功")
  • }
  • }
  • 運行上面的代碼會在當前目錄之下生成 demo.txt 文件,并將“http://c.biancheng.net/golang/”寫入到該文件中。

    使用 bufio 包讀取文件

    使用 bufio 包讀取文件也非常方便,我們先來看下 bufio 包的相關的 Reader 函數方法:

  • //首先定義了一個用來緩沖 io.Reader 對象的結構體,同時該結構體擁有以下相關的方法
  • type Reader struct {
  • }
  • ?
  • //NewReader 函數用來返回一個默認大小 buffer 的 Reader 對象(默認大小是 4096) 等同于 NewReaderSize(rd,4096)
  • func NewReader(rd io.Reader) *Reader
  • ?
  • //該函數返回一個指定大小 buffer(size 最小為 16)的 Reader 對象,如果 io.Reader 參數已經是一個足夠大的 Reader,它將返回該 Reader
  • func NewReaderSize(rd io.Reader, size int) *Reader
  • ?
  • //該方法返回從當前 buffer 中能被讀到的字節數
  • func (b *Reader) Buffered() int
  • ?
  • //Discard 方法跳過后續的 n 個字節的數據,返回跳過的字節數。如果 0 <= n <= b.Buffered(),該方法將不會從 io.Reader 中成功讀取數據
  • func (b *Reader) Discard(n int) (discarded int, err error)
  • ?
  • //Peekf 方法返回緩存的一個切片,該切片只包含緩存中的前 n 個字節的數據
  • func (b *Reader) Peek(n int) ([]byte, error)
  • ?
  • //把 Reader 緩存對象中的數據讀入到 []byte 類型的 p 中,并返回讀取的字節數。讀取成功,err 將返回空值
  • func (b *Reader) Read(p []byte) (n int, err error)
  • ?
  • //返回單個字節,如果沒有數據返回 err
  • func (b *Reader) ReadByte() (byte, error)
  • ?
  • //該方法在 b 中讀取 delimz 之前的所有數據,返回的切片是已讀出的數據的引用,切片中的數據在下一次的讀取操作之前是有效的。如果未找到 delim,將返回查找結果并返回 nil 空值。因為緩存的數據可能被下一次的讀寫操作修改,因此一般使用 ReadBytes 或者 ReadString,他們返回的都是數據拷貝
  • func (b *Reader) ReadSlice(delim byte) (line []byte, err error)
  • ?
  • //功能同 ReadSlice,返回數據的拷貝
  • func (b *Reader) ReadBytes(delim byte) ([]byte, error)
  • ?
  • //功能同 ReadBytes,返回字符串
  • func (b *Reader) ReadString(delim byte) (string, error)
  • ?
  • //該方法是一個低水平的讀取方式,一般建議使用 ReadBytes('\n') 或 ReadString('\n'),或者使用一個 Scanner 來代替。ReadLine 通過調用 ReadSlice 方法實現,返回的也是緩存的切片,用于讀取一行數據,不包括行尾標記(\n 或 \r\n)
  • func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)
  • ?
  • //讀取單個 UTF-8 字符并返回一個 rune 和字節大小
  • func (b *Reader) ReadRune() (r rune, size int, err error)
  • 示例代碼如下:

  • package main
  • ?
  • import (
  • "bufio"
  • "fmt"
  • "os"
  • "strconv"
  • )
  • ?
  • func main() {
  • fileObj, err := os.Open("demo.txt")
  • if err != nil {
  • fmt.Println("文件打開失敗:", err)
  • return
  • }
  • defer fileObj.Close()
  • //一個文件對象本身是實現了io.Reader的 使用bufio.NewReader去初始化一個Reader對象,存在buffer中的,讀取一次就會被清空
  • reader := bufio.NewReader(fileObj)
  • buf := make([]byte, 1024)
  • //讀取 Reader 對象中的內容到 []byte 類型的 buf 中
  • info, err := reader.Read(buf)
  • if err != nil {
  • fmt.Println(err)
  • }
  • fmt.Println("讀取的字節數:" + strconv.Itoa(info))
  • //這里的buf是一個[]byte,因此如果需要只輸出內容,仍然需要將文件內容的換行符替換掉
  • fmt.Println("讀取的文件內容:", string(buf))
  • }
  • 運行結果如下:

    go run main.go
    讀取的字節數:30
    讀取的文件內容: http://c.biancheng.net/golang/

    11.11?Go語言并發目錄遍歷

    11.12?Go語言從INI配置文件中讀取需要的值

    11.13?Go語言文件的寫入、追加、讀取、復制操作

    Go語言的 os 包下有一個 OpenFile 函數,其原型如下所示:

    func OpenFile(name string, flag int, perm FileMode) (file *File, err error)

    其中 name 是文件的文件名,如果不是在當前路徑下運行需要加上具體路徑;flag 是文件的處理參數,為 int 類型,根據系統的不同具體值可能有所不同,但是作用是相同的。

    下面列舉了一些常用的 flag 文件處理參數:

    • O_RDONLY:只讀模式打開文件;
    • O_WRONLY:只寫模式打開文件;
    • O_RDWR:讀寫模式打開文件;
    • O_APPEND:寫操作時將數據附加到文件尾部(追加);
    • O_CREATE:如果不存在將創建一個新文件;
    • O_EXCL:和 O_CREATE 配合使用,文件必須不存在,否則返回一個錯誤;
    • O_SYNC:當進行一系列寫操作時,每次都要等待上次的 I/O 操作完成再進行;
    • O_TRUNC:如果可能,在打開時清空文件。


    【示例 1】:創建一個新文件 golang.txt,并在其中寫入 5 句“http://c.biancheng.net/golang/”。

  • package main
  • ?
  • import (
  • ??? "bufio"
  • ??? "fmt"
  • ??? "os"
  • )
  • ?
  • func main() {
  • ??? //創建一個新文件,寫入內容 5 句 “http://c.biancheng.net/golang/”
  • ??? filePath := "e:/code/golang.txt"
  • ??? file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
  • ??? if err != nil {
  • ??????? fmt.Println("文件打開失敗", err)
  • ??? }
  • ??? //及時關閉file句柄
  • ??? defer file.Close()
  • ?
  • ??? //寫入文件時,使用帶緩存的 *Writer
  • ??? write := bufio.NewWriter(file)
  • ??? for i := 0; i < 5; i++ {
  • ??????? write.WriteString("http://c.biancheng.net/golang/ \n")
  • ??? }
  • ??? //Flush將緩存的文件真正寫入到文件中
  • ??? write.Flush()
  • }
  • 執行成功之后會在指定目錄下生成一個 golang.txt 文件,打開該文件如下圖所示:
    ?


    【示例 2】:打開一個存在的文件,在原來的內容追加內容“C語言中文網”

  • package main
  • ?
  • import (
  • ??? "bufio"
  • ??? "fmt"
  • ??? "os"
  • )
  • ?
  • func main() {
  • ??? filePath := "e:/code/golang.txt"
  • ??? file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND, 0666)
  • ??? if err != nil {
  • ??????? fmt.Println("文件打開失敗", err)
  • ??? }
  • ??? //及時關閉file句柄
  • ??? defer file.Close()
  • ?
  • ??? //寫入文件時,使用帶緩存的 *Writer
  • ??? write := bufio.NewWriter(file)
  • ??? for i := 0; i < 5; i++ {
  • ??????? write.WriteString("C語言中文網 \r\n")
  • ??? }
  • ??? //Flush將緩存的文件真正寫入到文件中
  • ??? write.Flush()
  • }
  • 執行成功之后,打開 golang.txt 文件發現內容追加成功,如下圖所示:
    ?


    【示例 3】:打開一個存在的文件,將原來的內容讀出來,顯示在終端,并且追加 5 句“Hello,C語言中文網”。

  • package main
  • ?
  • import (
  • ??? "bufio"
  • ??? "fmt"
  • ??? "io"
  • ??? "os"
  • )
  • ?
  • func main() {
  • ??? filePath := "e:/code/golang.txt"
  • ??? file, err := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666)
  • ??? if err != nil {
  • ??????? fmt.Println("文件打開失敗", err)
  • ??? }
  • ??? //及時關閉file句柄
  • ??? defer file.Close()
  • ?
  • ??? //讀原來文件的內容,并且顯示在終端
  • ??? reader := bufio.NewReader(file)
  • ??? for {
  • ??????? str, err := reader.ReadString('\n')
  • ??????? if err == io.EOF {
  • ??????????? break
  • ??????? }
  • ??????? fmt.Print(str)
  • ??? }
  • ?
  • ??? //寫入文件時,使用帶緩存的 *Writer
  • ??? write := bufio.NewWriter(file)
  • ??? for i := 0; i < 5; i++ {
  • ??????? write.WriteString("Hello,C語言中文網。 \r\n")
  • ??? }
  • ??? //Flush將緩存的文件真正寫入到文件中
  • ??? write.Flush()
  • }
  • 執行成功之后,會在控制臺打印出文件的內容,并在文件中追加指定的內容,如下圖所示:
    ?


    【示例 4】:編寫一個程序,將一個文件的內容復制到另外一個文件(注:這兩個文件都已存在)

  • package main
  • ?
  • import (
  • ??? "fmt"
  • ??? "io/ioutil"
  • )
  • ?
  • func main() {
  • ??? file1Path := "e:/code/golang.txt"
  • ??? file2Path := "e:/code/other.txt"
  • ??? data, err := ioutil.ReadFile(file1Path)
  • ??? if err != nil {
  • ??????? fmt.Printf("文件打開失敗=%v\n", err)
  • ??????? return
  • ??? }
  • ??? err = ioutil.WriteFile(file2Path, data, 0666)
  • ??? if err != nil {
  • ??????? fmt.Printf("文件打開失敗=%v\n", err)
  • ??? }
  • }
  • 執行成功后,發現內容已經復制成功,如下圖所示:
    ?

    11.14?Go語言文件鎖操作

    我們使用Go語言開發一些程序的時候,往往出現多個進程同時操作同一份文件的情況,這很容易導致文件中的數據混亂。這時我們就需要采用一些手段來平衡這些沖突,文件鎖(flock)應運而生,下面我們就來介紹一下。

    對于 flock,最常見的例子就是 Nginx,進程運行起來后就會把當前的 PID 寫入這個文件,當然如果這個文件已經存在了,也就是前一個進程還沒有退出,那么 Nginx 就不會重新啟動,所以 flock 還可以用來檢測進程是否存在。

    flock 是對于整個文件的建議性鎖。也就是說,如果一個進程在一個文件(inode)上放了鎖,其它進程是可以知道的(建議性鎖不強求進程遵守)。最棒的一點是,它的第一個參數是文件描述符,在此文件描述符關閉時,鎖會自動釋放。而當進程終止時,所有的文件描述符均會被關閉。所以很多時候就不用考慮類似原子鎖解鎖的事情。

    在具體介紹前,先上代碼

  • package main
  • ?
  • import (
  • "fmt"
  • "os"
  • "sync"
  • "syscall"
  • "time"
  • )
  • ?
  • //文件鎖
  • type FileLock struct {
  • dir string
  • f *os.File
  • }
  • ?
  • func New(dir string) *FileLock {
  • return &FileLock{
  • dir: dir,
  • }
  • }
  • ?
  • //加鎖
  • func (l *FileLock) Lock() error {
  • f, err := os.Open(l.dir)
  • if err != nil {
  • return err
  • }
  • l.f = f
  • err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
  • if err != nil {
  • return fmt.Errorf("cannot flock directory %s - %s", l.dir, err)
  • }
  • return nil
  • }
  • ?
  • //釋放鎖
  • func (l *FileLock) Unlock() error {
  • defer l.f.Close()
  • return syscall.Flock(int(l.f.Fd()), syscall.LOCK_UN)
  • }
  • ?
  • func main() {
  • test_file_path, _ := os.Getwd()
  • locked_file := test_file_path
  • ?
  • wg := sync.WaitGroup{}
  • ?
  • for i := 0; i < 10; i++ {
  • wg.Add(1)
  • go func(num int) {
  • flock := New(locked_file)
  • err := flock.Lock()
  • if err != nil {
  • wg.Done()
  • fmt.Println(err.Error())
  • return
  • }
  • fmt.Printf("output : %d\n", num)
  • wg.Done()
  • }(i)
  • }
  • wg.Wait()
  • time.Sleep(2 * time.Second)
  • ?
  • }
  • 在 Windows 系統下運行上面的代碼會出現下面的錯誤:

    undefined: syscall.Flock
    undefined: syscall.LOCK_EX
    undefined: syscall.LOCK_NB
    undefined: syscall.Flock
    undefined: syscall.LOCK_UN

    這是因為 Windows 系統不支持 pid 鎖,所以我們需要在 Linux 或 Mac 系統下才能正常運行上面的程序。

    上面代碼中演示了同時啟動 10 個 goroutinue,但在程序運行過程中,只有一個 goroutine 能獲得文件鎖(flock)。其它的 goroutinue 在獲取不到 flock 后,會拋出異常的信息。這樣即可達到同一文件在指定的周期內只允許一個進程訪問的效果。

    代碼中文件鎖的具體調用:

    syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)

    我們采用了 syscall.LOCK_EX、syscall.LOCK_NB,這是什么意思呢?

    flock 屬于建議性鎖,不具備強制性。一個進程使用 flock 將文件鎖住,另一個進程可以直接操作正在被鎖的文件,修改文件中的數據,原因在于 flock 只是用于檢測文件是否被加鎖,針對文件已經被加鎖,另一個進程寫入數據的情況,內核不會阻止這個進程的寫入操作,也就是建議性鎖的內核處理策略。

    flock 主要三種操作類型:

    • LOCK_SH:共享鎖,多個進程可以使用同一把鎖,常被用作讀共享鎖;
    • LOCK_EX:排他鎖,同時只允許一個進程使用,常被用作寫鎖;
    • LOCK_UN:釋放鎖。


    進程使用 flock 嘗試鎖文件時,如果文件已經被其他進程鎖住,進程會被阻塞直到鎖被釋放掉,或者在調用 flock 的時候,采用 LOCK_NB 參數。在嘗試鎖住該文件的時候,發現已經被其他服務鎖住,會返回錯誤,錯誤碼為 EWOULDBLOCK。

    flock 鎖的釋放非常具有特色,即可調用 LOCK_UN 參數來釋放文件鎖,也可以通過關閉 fd 的方式來釋放文件鎖(flock 的第一個參數是 fd),意味著 flock 會隨著進程的關閉而被自動釋放掉。

    總結

    以上是生活随笔為你收集整理的第11章 Go语言文件处理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产无av码在线观看 | 伊人久久婷婷五月综合97色 | 日韩欧美中文字幕在线三区 | 无码免费一区二区三区 | 丁香花在线影院观看在线播放 | 人妻少妇精品无码专区动漫 | 成人试看120秒体验区 | 性生交片免费无码看人 | 国产午夜精品一区二区三区嫩草 | 日韩人妻无码中文字幕视频 | 中文字幕人成乱码熟女app | 欧美乱妇无乱码大黄a片 | 国产农村乱对白刺激视频 | 亚洲精品一区二区三区在线 | 性色欲网站人妻丰满中文久久不卡 | 国产性生交xxxxx无码 | 国产精品久久久一区二区三区 | 国产偷抇久久精品a片69 | 妺妺窝人体色www在线小说 | 久久精品成人欧美大片 | 亚洲熟女一区二区三区 | 日日干夜夜干 | 性色av无码免费一区二区三区 | 成人精品天堂一区二区三区 | 中文无码精品a∨在线观看不卡 | 国产国产精品人在线视 | 鲁鲁鲁爽爽爽在线视频观看 | 国产成人午夜福利在线播放 | 国产福利视频一区二区 | 亚洲自偷自拍另类第1页 | 97精品国产97久久久久久免费 | 免费中文字幕日韩欧美 | 欧美freesex黑人又粗又大 | av在线亚洲欧洲日产一区二区 | 97精品人妻一区二区三区香蕉 | 色综合视频一区二区三区 | 欧美放荡的少妇 | 伊在人天堂亚洲香蕉精品区 | 四虎4hu永久免费 | 欧美日韩人成综合在线播放 | 性色欲网站人妻丰满中文久久不卡 | 亚洲色偷偷男人的天堂 | 内射巨臀欧美在线视频 | 亚洲成a人片在线观看无码3d | 全黄性性激高免费视频 | 影音先锋中文字幕无码 | 日韩无套无码精品 | 欧美 丝袜 自拍 制服 另类 | 人人妻人人澡人人爽精品欧美 | 国产在线精品一区二区三区直播 | 日本一区二区三区免费高清 | 成人精品一区二区三区中文字幕 | 一本一道久久综合久久 | 久久99久久99精品中文字幕 | 丰满少妇女裸体bbw | 亚洲狠狠色丁香婷婷综合 | 无码一区二区三区在线观看 | av无码不卡在线观看免费 | 国产av剧情md精品麻豆 | 中文字幕无码人妻少妇免费 | 中文字幕乱码人妻无码久久 | 狠狠综合久久久久综合网 | 2019nv天堂香蕉在线观看 | 日韩人妻无码中文字幕视频 | 国产一区二区不卡老阿姨 | 亚洲精品一区三区三区在线观看 | 成年女人永久免费看片 | 99久久人妻精品免费一区 | 荫蒂被男人添的好舒服爽免费视频 | 国产三级精品三级男人的天堂 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产av一区二区三区最新精品 | 2020久久超碰国产精品最新 | 精品国产av色一区二区深夜久久 | 久久国产36精品色熟妇 | 女人色极品影院 | 中文久久乱码一区二区 | 日本欧美一区二区三区乱码 | 久久综合给合久久狠狠狠97色 | 中文字幕中文有码在线 | 国产成人一区二区三区在线观看 | 精品夜夜澡人妻无码av蜜桃 | 国产又爽又猛又粗的视频a片 | 免费播放一区二区三区 | 丰满肥臀大屁股熟妇激情视频 | 久久久av男人的天堂 | 国产成人久久精品流白浆 | 草草网站影院白丝内射 | 亚洲熟妇色xxxxx亚洲 | 在线看片无码永久免费视频 | 亚洲国产精品久久久天堂 | 国产成人久久精品流白浆 | 亚洲自偷自拍另类第1页 | 欧美熟妇另类久久久久久多毛 | 蜜臀aⅴ国产精品久久久国产老师 | 人人澡人人妻人人爽人人蜜桃 | 久久久www成人免费毛片 | 一本精品99久久精品77 | 麻豆精产国品 | 成人无码精品1区2区3区免费看 | 亚洲精品www久久久 | 亚洲人成影院在线无码按摩店 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 大色综合色综合网站 | 亚洲综合色区中文字幕 | 亚洲色大成网站www | 亚洲中文字幕av在天堂 | 国产亚洲视频中文字幕97精品 | 中文亚洲成a人片在线观看 | 国产精品理论片在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 性欧美疯狂xxxxbbbb | 免费无码午夜福利片69 | 99久久亚洲精品无码毛片 | 兔费看少妇性l交大片免费 | 国产精品久久久久久无码 | 人人澡人摸人人添 | 色情久久久av熟女人妻网站 | 波多野结衣aⅴ在线 | 久久精品人妻少妇一区二区三区 | 久久午夜无码鲁丝片秋霞 | www一区二区www免费 | 在线a亚洲视频播放在线观看 | 乱码午夜-极国产极内射 | 牲欲强的熟妇农村老妇女视频 | 久久久久久久人妻无码中文字幕爆 | 日本丰满熟妇videos | 国产欧美精品一区二区三区 | 亚洲爆乳无码专区 | 免费观看激色视频网站 | 国产一区二区三区四区五区加勒比 | 国产精品久久久久无码av色戒 | 久久97精品久久久久久久不卡 | 国产热a欧美热a在线视频 | 亚洲人成影院在线观看 | 清纯唯美经典一区二区 | 国产艳妇av在线观看果冻传媒 | 国产精品18久久久久久麻辣 | 色老头在线一区二区三区 | 国产农村乱对白刺激视频 | 人妻少妇精品无码专区动漫 | 国产精品第一区揄拍无码 | 亚洲精品一区二区三区婷婷月 | 欧洲熟妇精品视频 | 久久无码人妻影院 | 日日鲁鲁鲁夜夜爽爽狠狠 | 免费无码的av片在线观看 | 国产av无码专区亚洲awww | 久久人人爽人人爽人人片av高清 | 亚洲中文字幕无码中文字在线 | 久久五月精品中文字幕 | 久久无码专区国产精品s | 精品一二三区久久aaa片 | 久久综合九色综合欧美狠狠 | 日韩无套无码精品 | 欧美熟妇另类久久久久久不卡 | 一区二区三区高清视频一 | 乱码午夜-极国产极内射 | 中文字幕精品av一区二区五区 | 国产人妻精品一区二区三区 | 亚洲 a v无 码免 费 成 人 a v | 国产亚洲精品久久久久久久久动漫 | 日日橹狠狠爱欧美视频 | 亚洲欧美国产精品专区久久 | 日日夜夜撸啊撸 | 亚洲精品无码国产 | 国产成人无码一二三区视频 | 天天躁日日躁狠狠躁免费麻豆 | 黄网在线观看免费网站 | 自拍偷自拍亚洲精品10p | 日日干夜夜干 | 人妻尝试又大又粗久久 | 亚洲男女内射在线播放 | 精品夜夜澡人妻无码av蜜桃 | 久9re热视频这里只有精品 | 55夜色66夜色国产精品视频 | 亚洲熟妇自偷自拍另类 | 无码国模国产在线观看 | 99久久久无码国产精品免费 | 国产精品视频免费播放 | 99麻豆久久久国产精品免费 | 亚洲国产精品无码一区二区三区 | 国产婷婷色一区二区三区在线 | 国产精品久久久午夜夜伦鲁鲁 | 欧美兽交xxxx×视频 | yw尤物av无码国产在线观看 | 国产无av码在线观看 | а√天堂www在线天堂小说 | 久久精品人人做人人综合 | 无码人妻出轨黑人中文字幕 | 婷婷丁香五月天综合东京热 | 久久精品女人的天堂av | 色一情一乱一伦一区二区三欧美 | 少妇愉情理伦片bd | 免费国产成人高清在线观看网站 | 欧美国产日韩亚洲中文 | 国产精品久久精品三级 | 中文无码成人免费视频在线观看 | 欧美三级不卡在线观看 | 国产午夜亚洲精品不卡 | 国产无套粉嫩白浆在线 | av无码不卡在线观看免费 | 久久五月精品中文字幕 | 久久zyz资源站无码中文动漫 | 荫蒂被男人添的好舒服爽免费视频 | 中文字幕av伊人av无码av | 国产片av国语在线观看 | 国产精品久久久久7777 | 成人av无码一区二区三区 | 日本高清一区免费中文视频 | 日韩精品乱码av一区二区 | 无码精品国产va在线观看dvd | 免费国产成人高清在线观看网站 | 乱人伦人妻中文字幕无码久久网 | 国产午夜亚洲精品不卡 | 无码精品国产va在线观看dvd | 2019午夜福利不卡片在线 | 午夜性刺激在线视频免费 | 无码成人精品区在线观看 | 欧美国产日韩亚洲中文 | 香蕉久久久久久av成人 | 亚洲中文字幕在线无码一区二区 | 国产午夜亚洲精品不卡 | 野狼第一精品社区 | 99久久亚洲精品无码毛片 | 亚洲一区二区三区香蕉 | 日本乱人伦片中文三区 | 欧美三级不卡在线观看 | 欧美午夜特黄aaaaaa片 | 性欧美疯狂xxxxbbbb | 国产精品美女久久久久av爽李琼 | 无码午夜成人1000部免费视频 | 真人与拘做受免费视频一 | 国产香蕉尹人综合在线观看 | 亚洲精品一区二区三区婷婷月 | 成人片黄网站色大片免费观看 | 无套内谢的新婚少妇国语播放 | 成人试看120秒体验区 | 亚洲gv猛男gv无码男同 | 中文字幕av日韩精品一区二区 | www国产亚洲精品久久久日本 | 国产一区二区三区日韩精品 | 国产成人av免费观看 | 国产精品igao视频网 | 国内精品九九久久久精品 | 欧美人与物videos另类 | 在线欧美精品一区二区三区 | 亚洲大尺度无码无码专区 | av小次郎收藏 | 丰满少妇熟乱xxxxx视频 | 色噜噜亚洲男人的天堂 | 亚洲日本在线电影 | 国产熟妇高潮叫床视频播放 | 日本精品人妻无码77777 天堂一区人妻无码 | 两性色午夜视频免费播放 | 国产精品久久久久9999小说 | 扒开双腿吃奶呻吟做受视频 | 中文字幕av无码一区二区三区电影 | 久久综合狠狠综合久久综合88 | 无码乱肉视频免费大全合集 | 在线播放亚洲第一字幕 | 国产精华av午夜在线观看 | 国内精品人妻无码久久久影院蜜桃 | 亚洲综合在线一区二区三区 | 国产农村妇女高潮大叫 | 亚洲欧洲无卡二区视頻 | 在线a亚洲视频播放在线观看 | 色婷婷久久一区二区三区麻豆 | 麻豆人妻少妇精品无码专区 | 激情人妻另类人妻伦 | 国产性生大片免费观看性 | 亚洲中文字幕乱码av波多ji | 狠狠色色综合网站 | 久久亚洲中文字幕无码 | 亚洲成熟女人毛毛耸耸多 | 在线а√天堂中文官网 | 国产女主播喷水视频在线观看 | 天海翼激烈高潮到腰振不止 | 亚洲aⅴ无码成人网站国产app | 牲交欧美兽交欧美 | 国产人成高清在线视频99最全资源 | 扒开双腿疯狂进出爽爽爽视频 | 特级做a爰片毛片免费69 | 精品人人妻人人澡人人爽人人 | 久久99精品国产麻豆蜜芽 | 国产精品无码久久av | 久久久久国色av免费观看性色 | 青青青爽视频在线观看 | 亚洲国产精华液网站w | 亚洲国产成人av在线观看 | 亚洲中文字幕无码中文字在线 | 内射白嫩少妇超碰 | 老熟女重囗味hdxx69 | 蜜臀av无码人妻精品 | 国精产品一区二区三区 | 人妻体内射精一区二区三四 | 亚洲精品国产精品乱码视色 | 国产两女互慰高潮视频在线观看 | 久久综合给合久久狠狠狠97色 | 国产人妻精品一区二区三区 | 国产精品美女久久久久av爽李琼 | 玩弄少妇高潮ⅹxxxyw | 免费观看黄网站 | 亚洲s码欧洲m码国产av | 性欧美大战久久久久久久 | 成 人影片 免费观看 | 六月丁香婷婷色狠狠久久 | 色综合久久88色综合天天 | 久久无码专区国产精品s | 久精品国产欧美亚洲色aⅴ大片 | 无遮挡国产高潮视频免费观看 | 红桃av一区二区三区在线无码av | 国内少妇偷人精品视频 | 欧美人与禽zoz0性伦交 | 乱码av麻豆丝袜熟女系列 | 亚洲の无码国产の无码影院 | 国产精品毛多多水多 | 18无码粉嫩小泬无套在线观看 | 少妇高潮一区二区三区99 | 欧美三级a做爰在线观看 | 国产综合久久久久鬼色 | 国产亚洲欧美日韩亚洲中文色 | 国产av久久久久精东av | 久久精品无码一区二区三区 | 成年女人永久免费看片 | 日韩少妇内射免费播放 | 亚洲精品久久久久中文第一幕 | 久久国产自偷自偷免费一区调 | 国产精品va在线播放 | 最新国产乱人伦偷精品免费网站 | 蜜臀av无码人妻精品 | 麻豆国产人妻欲求不满 | 久久久久se色偷偷亚洲精品av | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲自偷自拍另类第1页 | 天天摸天天碰天天添 | 国产人妖乱国产精品人妖 | 亚洲中文字幕va福利 | 精品欧美一区二区三区久久久 | 国产激情精品一区二区三区 | 青青青手机频在线观看 | 欧美日本日韩 | 无码免费一区二区三区 | 伊人久久大香线蕉亚洲 | 一区二区三区乱码在线 | 欧洲 | 国产精品国产三级国产专播 | 欧美亚洲日韩国产人成在线播放 | 久精品国产欧美亚洲色aⅴ大片 | 狠狠噜狠狠狠狠丁香五月 | 国产97在线 | 亚洲 | 亚洲国产欧美日韩精品一区二区三区 | 伊人久久婷婷五月综合97色 | yw尤物av无码国产在线观看 | 亚洲一区二区三区播放 | 在线 国产 欧美 亚洲 天堂 | 精品久久久久香蕉网 | 日本熟妇人妻xxxxx人hd | 领导边摸边吃奶边做爽在线观看 | 日本大乳高潮视频在线观看 | 天天躁日日躁狠狠躁免费麻豆 | 未满小14洗澡无码视频网站 | 国产熟女一区二区三区四区五区 | 人人妻人人澡人人爽精品欧美 | 天下第一社区视频www日本 | 亚洲国产欧美日韩精品一区二区三区 | 国产色在线 | 国产 | 亚洲国产欧美国产综合一区 | 好爽又高潮了毛片免费下载 | 中文字幕日产无线码一区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 又大又黄又粗又爽的免费视频 | 成人片黄网站色大片免费观看 | 亚洲色欲色欲天天天www | 婷婷五月综合激情中文字幕 | 欧美一区二区三区视频在线观看 | 日日躁夜夜躁狠狠躁 | 任你躁国产自任一区二区三区 | 中文字幕无码热在线视频 | 日本丰满护士爆乳xxxx | 国产精品二区一区二区aⅴ污介绍 | 亚洲自偷自拍另类第1页 | 性欧美疯狂xxxxbbbb | 午夜无码区在线观看 | 亚洲精品成人福利网站 | 欧美人与牲动交xxxx | 日本又色又爽又黄的a片18禁 | 国产极品美女高潮无套在线观看 | 97久久精品无码一区二区 | 女人被男人爽到呻吟的视频 | 狂野欧美激情性xxxx | 精品国精品国产自在久国产87 | 成 人 网 站国产免费观看 | 日本熟妇大屁股人妻 | 久久久久久av无码免费看大片 | 亚洲色在线无码国产精品不卡 | 思思久久99热只有频精品66 | 国内少妇偷人精品视频 | 色婷婷香蕉在线一区二区 | 少妇人妻偷人精品无码视频 | 国产亚洲精品久久久ai换 | 久久人人爽人人爽人人片av高清 | 国产亚洲精品久久久久久久 | 亚洲理论电影在线观看 | 精品无码一区二区三区的天堂 | 欧美喷潮久久久xxxxx | 久久精品人人做人人综合试看 | 国产婷婷色一区二区三区在线 | 色婷婷综合激情综在线播放 | 最近的中文字幕在线看视频 | 国产在线一区二区三区四区五区 | 正在播放东北夫妻内射 | 免费观看激色视频网站 | 亚洲中文字幕无码一久久区 | 乱码午夜-极国产极内射 | 老熟妇仑乱视频一区二区 | 无码人妻久久一区二区三区不卡 | 大地资源中文第3页 | 精品国产精品久久一区免费式 | 亚洲人亚洲人成电影网站色 | 亚洲精品中文字幕久久久久 | 亚洲日韩av片在线观看 | 国产农村妇女高潮大叫 | 无码国产乱人伦偷精品视频 | 欧洲熟妇色 欧美 | 性欧美牲交在线视频 | 精品无码成人片一区二区98 | 成人综合网亚洲伊人 | 内射欧美老妇wbb | 中文字幕精品av一区二区五区 | 久久99精品国产麻豆 | 精品久久久久香蕉网 | 日日躁夜夜躁狠狠躁 | 老司机亚洲精品影院 | 亚洲码国产精品高潮在线 | 无码播放一区二区三区 | 少妇一晚三次一区二区三区 | 77777熟女视频在线观看 а天堂中文在线官网 | 日本欧美一区二区三区乱码 | 美女张开腿让人桶 | 国产免费久久久久久无码 | 香蕉久久久久久av成人 | 国产成人午夜福利在线播放 | 国产精品二区一区二区aⅴ污介绍 | 国产色xx群视频射精 | 亚洲精品午夜国产va久久成人 | 欧美日韩综合一区二区三区 | 天天综合网天天综合色 | 无码成人精品区在线观看 | 少妇性荡欲午夜性开放视频剧场 | 精品无码av一区二区三区 | 精品成人av一区二区三区 | 亚洲一区二区三区香蕉 | 国产一区二区三区影院 | 国产精品无码成人午夜电影 | 熟女少妇在线视频播放 | 亚洲熟妇色xxxxx欧美老妇 | 久久五月精品中文字幕 | 十八禁真人啪啪免费网站 | 一区二区三区乱码在线 | 欧洲 | 色一情一乱一伦一视频免费看 | 成人av无码一区二区三区 | 两性色午夜免费视频 | 国产无遮挡又黄又爽免费视频 | 波多野结衣aⅴ在线 | 99久久无码一区人妻 | 东京热无码av男人的天堂 | 久久国产自偷自偷免费一区调 | 久久综合激激的五月天 | 四虎影视成人永久免费观看视频 | 帮老师解开蕾丝奶罩吸乳网站 | 乱人伦中文视频在线观看 | 久久国产精品精品国产色婷婷 | 夜夜影院未满十八勿进 | 98国产精品综合一区二区三区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 久久久久久久女国产乱让韩 | 日日躁夜夜躁狠狠躁 | 久久综合网欧美色妞网 | 精品久久久久久亚洲精品 | 国产午夜亚洲精品不卡 | 亚洲成av人片天堂网无码】 | 亚洲精品一区二区三区四区五区 | 日本一本二本三区免费 | 一区二区三区高清视频一 | 精品久久久久香蕉网 | 99久久无码一区人妻 | 国产精品久久久久久亚洲影视内衣 | 亚洲精品午夜国产va久久成人 | 亚洲综合在线一区二区三区 | 无码精品国产va在线观看dvd | 天堂无码人妻精品一区二区三区 | 国内精品人妻无码久久久影院蜜桃 | 国产国产精品人在线视 | 久久久婷婷五月亚洲97号色 | 97夜夜澡人人双人人人喊 | 7777奇米四色成人眼影 | 97se亚洲精品一区 | 亚洲精品国偷拍自产在线麻豆 | 曰韩无码二三区中文字幕 | 国产黑色丝袜在线播放 | 欧洲极品少妇 | 乌克兰少妇xxxx做受 | 国产精品无码一区二区桃花视频 | 中文字幕人成乱码熟女app | 人妻与老人中文字幕 | 精品水蜜桃久久久久久久 | 日本一卡二卡不卡视频查询 | 午夜成人1000部免费视频 | 啦啦啦www在线观看免费视频 | 疯狂三人交性欧美 | 久久久久亚洲精品男人的天堂 | 麻豆国产人妻欲求不满 | 无码国产乱人伦偷精品视频 | 给我免费的视频在线观看 | 无套内谢老熟女 | 在线播放免费人成毛片乱码 | 国产精品对白交换视频 | 高清不卡一区二区三区 | 欧美老妇与禽交 | 国产无套内射久久久国产 | 国产乱子伦视频在线播放 | 日本一卡二卡不卡视频查询 | 内射巨臀欧美在线视频 | 无码帝国www无码专区色综合 | 国产亚洲精品久久久久久大师 | 久久精品视频在线看15 | 亚洲精品一区二区三区大桥未久 | 粗大的内捧猛烈进出视频 | 激情亚洲一区国产精品 | 亚洲啪av永久无码精品放毛片 | 日日摸日日碰夜夜爽av | 亚洲精品成人av在线 | 日韩无套无码精品 | 久久亚洲中文字幕无码 | 18禁止看的免费污网站 | 四虎永久在线精品免费网址 | 国产午夜手机精彩视频 | av在线亚洲欧洲日产一区二区 | 午夜性刺激在线视频免费 | 人妻与老人中文字幕 | 欧美日韩一区二区三区自拍 | 无码任你躁久久久久久久 | 中文字幕亚洲情99在线 | 东京一本一道一二三区 | 久久久国产精品无码免费专区 | 在教室伦流澡到高潮hnp视频 | 日韩精品无码一区二区中文字幕 | www成人国产高清内射 | 日日躁夜夜躁狠狠躁 | 免费看男女做好爽好硬视频 | 久久精品国产一区二区三区 | 狂野欧美性猛xxxx乱大交 | 国产精品无码一区二区三区不卡 | 成人性做爰aaa片免费看 | 欧美 丝袜 自拍 制服 另类 | 国产人妻久久精品二区三区老狼 | 曰韩少妇内射免费播放 | 中文字幕乱妇无码av在线 | 美女张开腿让人桶 | 欧美 日韩 人妻 高清 中文 | 国产亚洲精品久久久久久久 | 午夜不卡av免费 一本久久a久久精品vr综合 | 女人被爽到呻吟gif动态图视看 | 性开放的女人aaa片 | 欧美精品国产综合久久 | 天天拍夜夜添久久精品 | 国产麻豆精品一区二区三区v视界 | 99麻豆久久久国产精品免费 | 国产精品久久久久9999小说 | 亚洲精品一区二区三区四区五区 | av在线亚洲欧洲日产一区二区 | 小鲜肉自慰网站xnxx | 欧美猛少妇色xxxxx | 国产黑色丝袜在线播放 | 大肉大捧一进一出好爽视频 | 色欲av亚洲一区无码少妇 | 久久亚洲中文字幕精品一区 | 欧美老熟妇乱xxxxx | 玩弄人妻少妇500系列视频 | 亚洲精品午夜无码电影网 | 人人爽人人澡人人人妻 | 国产成人亚洲综合无码 | 色婷婷综合中文久久一本 | 亚洲精品综合一区二区三区在线 | 精品国产乱码久久久久乱码 | 精品国精品国产自在久国产87 | 男女下面进入的视频免费午夜 | 熟妇激情内射com | √天堂中文官网8在线 | 黑人巨大精品欧美一区二区 | 丰满少妇高潮惨叫视频 | 成年美女黄网站色大免费全看 | 成人欧美一区二区三区黑人 | 午夜精品久久久久久久久 | 1000部啪啪未满十八勿入下载 | 亚洲色欲色欲天天天www | 蜜桃视频插满18在线观看 | 欧洲极品少妇 | 爱做久久久久久 | 久久久精品国产sm最大网站 | 国产精品久久久av久久久 | 玩弄中年熟妇正在播放 | 中文字幕无码乱人伦 | 福利一区二区三区视频在线观看 | 午夜嘿嘿嘿影院 | 国产色xx群视频射精 | 精品无码一区二区三区爱欲 | 国产成人综合美国十次 | 久久熟妇人妻午夜寂寞影院 | 装睡被陌生人摸出水好爽 | 午夜精品一区二区三区的区别 | 久久精品国产大片免费观看 | 色综合久久久久综合一本到桃花网 | 国产猛烈高潮尖叫视频免费 | 国内丰满熟女出轨videos | 丰满岳乱妇在线观看中字无码 | 国产女主播喷水视频在线观看 | 人人妻人人澡人人爽人人精品浪潮 | 欧美真人作爱免费视频 | 无码福利日韩神码福利片 | 国产精品第一区揄拍无码 | 欧美国产日产一区二区 | aa片在线观看视频在线播放 | 久久精品中文字幕大胸 | 中文字幕无线码 | 免费无码av一区二区 | 2019nv天堂香蕉在线观看 | 中文字幕无码日韩专区 | 性欧美牲交xxxxx视频 | 婷婷丁香五月天综合东京热 | 正在播放老肥熟妇露脸 | 亚洲欧洲日本无在线码 | 成人无码精品1区2区3区免费看 | 中文字幕无码av激情不卡 | 男人扒开女人内裤强吻桶进去 | 色综合久久中文娱乐网 | 无码av岛国片在线播放 | 一个人看的www免费视频在线观看 | 国产精品办公室沙发 | 精品国产麻豆免费人成网站 | 76少妇精品导航 | 高潮毛片无遮挡高清免费视频 | 无码成人精品区在线观看 | 亚洲日本一区二区三区在线 | 狠狠色丁香久久婷婷综合五月 | 麻豆国产丝袜白领秘书在线观看 | 国产艳妇av在线观看果冻传媒 | 国产乱人伦偷精品视频 | 亚洲精品一区二区三区在线观看 | 免费无码一区二区三区蜜桃大 | 日本va欧美va欧美va精品 | 黄网在线观看免费网站 | 午夜性刺激在线视频免费 | 久久国语露脸国产精品电影 | 亚洲成在人网站无码天堂 | 在线成人www免费观看视频 | 乱中年女人伦av三区 | 久9re热视频这里只有精品 | 精品亚洲韩国一区二区三区 | 亚无码乱人伦一区二区 | 色综合久久88色综合天天 | 丰满少妇熟乱xxxxx视频 | 亚洲精品午夜无码电影网 | 又色又爽又黄的美女裸体网站 | 亚洲成av人片天堂网无码】 | 精品国产av色一区二区深夜久久 | 我要看www免费看插插视频 | 性欧美牲交xxxxx视频 | 中文无码成人免费视频在线观看 | 久久无码人妻影院 | 天下第一社区视频www日本 | 色一情一乱一伦一视频免费看 | 国产舌乚八伦偷品w中 | av人摸人人人澡人人超碰下载 | 中文字幕乱码人妻无码久久 | 丰满少妇女裸体bbw | 麻豆蜜桃av蜜臀av色欲av | 妺妺窝人体色www在线小说 | 99久久人妻精品免费二区 | 精品国产精品久久一区免费式 | 久久国产精品偷任你爽任你 | 无码帝国www无码专区色综合 | 激情爆乳一区二区三区 | 日韩精品无码一区二区中文字幕 | 中文字幕无码免费久久99 | 日本高清一区免费中文视频 | 欧美日韩一区二区三区自拍 | а√资源新版在线天堂 | 天天躁夜夜躁狠狠是什么心态 | 精品国产一区二区三区av 性色 | 乱人伦人妻中文字幕无码 | 荡女精品导航 | 久久99国产综合精品 | 国产亚洲人成a在线v网站 | 亚洲无人区午夜福利码高清完整版 | 永久免费观看美女裸体的网站 | 初尝人妻少妇中文字幕 | 国产办公室秘书无码精品99 | 无码精品人妻一区二区三区av | 亚洲精品久久久久久久久久久 | 午夜精品久久久久久久久 | 精品亚洲成av人在线观看 | 亚洲性无码av中文字幕 | 丰满人妻精品国产99aⅴ | 老熟女重囗味hdxx69 | 欧美 日韩 亚洲 在线 | 大屁股大乳丰满人妻 | 人妻少妇精品视频专区 | 精品久久久无码人妻字幂 | 亚洲中文字幕无码一久久区 | 永久免费观看美女裸体的网站 | 国产成人无码午夜视频在线观看 | 丰满肥臀大屁股熟妇激情视频 | aⅴ亚洲 日韩 色 图网站 播放 | 久久综合网欧美色妞网 | 国产精品无码永久免费888 | 国产精品久久国产三级国 | 国精产品一品二品国精品69xx | 激情综合激情五月俺也去 | 亚洲の无码国产の无码影院 | 爽爽影院免费观看 | 国产两女互慰高潮视频在线观看 | av香港经典三级级 在线 | 无码成人精品区在线观看 | 久久久中文字幕日本无吗 | 中文字幕乱码亚洲无线三区 | 超碰97人人做人人爱少妇 | 久久人人爽人人爽人人片av高清 | 婷婷丁香五月天综合东京热 | a在线亚洲男人的天堂 | 亚洲日韩av一区二区三区中文 | 国产熟妇高潮叫床视频播放 | 少妇高潮喷潮久久久影院 | 国产精品第一区揄拍无码 | 欧美第一黄网免费网站 | 久久国产劲爆∧v内射 | 国产人妻精品午夜福利免费 | 精品日本一区二区三区在线观看 | 久久久中文字幕日本无吗 | 欧美人与善在线com | 精品一区二区不卡无码av | 国产成人综合在线女婷五月99播放 | 欧美午夜特黄aaaaaa片 | 老子影院午夜伦不卡 | 亚洲色偷偷男人的天堂 | 精品偷自拍另类在线观看 | 老司机亚洲精品影院无码 | 在线视频网站www色 | 国产艳妇av在线观看果冻传媒 | 一本色道婷婷久久欧美 | 无码av岛国片在线播放 | 中文字幕乱妇无码av在线 | 亚洲gv猛男gv无码男同 | 伊人色综合久久天天小片 | 国产97在线 | 亚洲 | 精品久久8x国产免费观看 | 国产成人无码av一区二区 | 国产亚洲精品久久久久久国模美 | 极品尤物被啪到呻吟喷水 | 88国产精品欧美一区二区三区 | 国产精品久久久av久久久 | 自拍偷自拍亚洲精品被多人伦好爽 | 欧美亚洲国产一区二区三区 | 东京热无码av男人的天堂 | 亚洲精品综合一区二区三区在线 | 欧美性色19p | 国产精品久久久久久无码 | 精品 日韩 国产 欧美 视频 | 日日摸夜夜摸狠狠摸婷婷 | 97无码免费人妻超级碰碰夜夜 | 亚洲日韩一区二区 | 日本丰满熟妇videos | 久久精品国产一区二区三区 | a片在线免费观看 | 性做久久久久久久久 | 日本一区二区三区免费播放 | 人人妻人人澡人人爽欧美一区九九 | 亚洲精品欧美二区三区中文字幕 | 纯爱无遮挡h肉动漫在线播放 | 无码乱肉视频免费大全合集 | 婷婷综合久久中文字幕蜜桃三电影 | 一个人免费观看的www视频 | 成人无码视频免费播放 | 欧美老人巨大xxxx做受 | 久在线观看福利视频 | 强开小婷嫩苞又嫩又紧视频 | 天天摸天天透天天添 | 国产三级精品三级男人的天堂 | 国产一精品一av一免费 | 麻豆国产人妻欲求不满 | 少妇久久久久久人妻无码 | 天天拍夜夜添久久精品 | 无码毛片视频一区二区本码 | 国产婷婷色一区二区三区在线 | 狂野欧美性猛交免费视频 | 亚洲成av人影院在线观看 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 无套内谢的新婚少妇国语播放 | 精品国产av色一区二区深夜久久 | 色 综合 欧美 亚洲 国产 | 国产精品无码成人午夜电影 | 亚洲国产高清在线观看视频 | 蜜桃视频韩日免费播放 | 一区二区三区高清视频一 | 在教室伦流澡到高潮hnp视频 | 老司机亚洲精品影院无码 | 国产做国产爱免费视频 | 日本成熟视频免费视频 | 四虎影视成人永久免费观看视频 | 婷婷丁香六月激情综合啪 | 国产精品亚洲а∨无码播放麻豆 | 玩弄中年熟妇正在播放 | 国产97人人超碰caoprom | 丰满妇女强制高潮18xxxx | 巨爆乳无码视频在线观看 | 天天综合网天天综合色 | 欧美真人作爱免费视频 | 国产精品va在线播放 | 欧美人与牲动交xxxx | 亚洲区欧美区综合区自拍区 | 四虎影视成人永久免费观看视频 | 澳门永久av免费网站 | 未满小14洗澡无码视频网站 | 国产成人无码区免费内射一片色欲 | 亚洲中文字幕成人无码 | 国产乱码精品一品二品 | 高清不卡一区二区三区 | 中文字幕乱码人妻二区三区 | aⅴ在线视频男人的天堂 | 亚洲一区二区三区 | 日本www一道久久久免费榴莲 | 亚洲国产午夜精品理论片 | 亚洲精品久久久久久久久久久 | 欧美一区二区三区视频在线观看 | 成人无码精品一区二区三区 | 狠狠综合久久久久综合网 | 午夜性刺激在线视频免费 | 日本熟妇人妻xxxxx人hd | 网友自拍区视频精品 | 日本乱人伦片中文三区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 婷婷丁香五月天综合东京热 | 欧美xxxx黑人又粗又长 | 丝袜人妻一区二区三区 | 亚洲成av人片天堂网无码】 | 成人aaa片一区国产精品 | 欧美放荡的少妇 | 国产精品香蕉在线观看 | 少妇邻居内射在线 | 任你躁在线精品免费 | 动漫av一区二区在线观看 | 鲁一鲁av2019在线 | a片在线免费观看 | 精品少妇爆乳无码av无码专区 | 波多野结衣乳巨码无在线观看 | 小sao货水好多真紧h无码视频 | 六月丁香婷婷色狠狠久久 | 国产免费久久久久久无码 | 一本大道伊人av久久综合 | 亚洲啪av永久无码精品放毛片 | 亚洲精品欧美二区三区中文字幕 | 精品国产av色一区二区深夜久久 | 亚洲国产日韩a在线播放 | 帮老师解开蕾丝奶罩吸乳网站 | 欧美三级a做爰在线观看 | 免费男性肉肉影院 | 亚洲自偷自拍另类第1页 | 少妇人妻av毛片在线看 | 国内综合精品午夜久久资源 | 久久婷婷五月综合色国产香蕉 | 激情内射亚州一区二区三区爱妻 | 久久精品视频在线看15 | 成熟妇人a片免费看网站 | 风流少妇按摩来高潮 | 国模大胆一区二区三区 | 国产精品内射视频免费 | 国产成人精品久久亚洲高清不卡 | 国产乱人偷精品人妻a片 | 欧美zoozzooz性欧美 | 熟妇人妻无码xxx视频 | 精品无人区无码乱码毛片国产 | 亚洲国产精品一区二区美利坚 | 国产特级毛片aaaaaa高潮流水 | 国产香蕉尹人视频在线 | 乱中年女人伦av三区 | 日韩成人一区二区三区在线观看 | 爆乳一区二区三区无码 | 国产精品毛片一区二区 | 蜜臀aⅴ国产精品久久久国产老师 | a国产一区二区免费入口 | 天下第一社区视频www日本 | 亚洲综合久久一区二区 | 久久精品国产一区二区三区 | 99久久人妻精品免费一区 | 精品久久久久久人妻无码中文字幕 | 在线观看欧美一区二区三区 | 欧洲熟妇色 欧美 | 欧美 亚洲 国产 另类 | 爱做久久久久久 | 国产精品无码成人午夜电影 | 国产综合在线观看 | 国产成人精品三级麻豆 | 国产特级毛片aaaaaa高潮流水 | 久久午夜夜伦鲁鲁片无码免费 | 国产一区二区三区四区五区加勒比 | 高清国产亚洲精品自在久久 | 又湿又紧又大又爽a视频国产 | 亚洲毛片av日韩av无码 | 欧美人与物videos另类 | 成人无码视频免费播放 | 国产人妻精品一区二区三区不卡 | 国产人妻久久精品二区三区老狼 | 国产综合色产在线精品 | 亚洲精品一区二区三区在线 | 国产成人无码a区在线观看视频app | 少妇人妻大乳在线视频 | 国产情侣作爱视频免费观看 | 欧美丰满老熟妇xxxxx性 | 色欲av亚洲一区无码少妇 | 九九在线中文字幕无码 | 九九在线中文字幕无码 | 欧美大屁股xxxxhd黑色 | 特黄特色大片免费播放器图片 | 四虎影视成人永久免费观看视频 | 熟妇人妻中文av无码 | 131美女爱做视频 | 性色欲情网站iwww九文堂 | 久久国产精品精品国产色婷婷 | 老子影院午夜精品无码 | 麻豆精品国产精华精华液好用吗 | 国产舌乚八伦偷品w中 | 97人妻精品一区二区三区 | 黑人巨大精品欧美一区二区 | 国产精品人人爽人人做我的可爱 | 亚洲精品国偷拍自产在线观看蜜桃 | 成人无码精品一区二区三区 | 狠狠色丁香久久婷婷综合五月 | 无码人妻少妇伦在线电影 | 亚洲一区二区三区香蕉 | 成人无码视频在线观看网站 | 国精品人妻无码一区二区三区蜜柚 | 在线欧美精品一区二区三区 | 亚洲s码欧洲m码国产av | 国产特级毛片aaaaaaa高清 | 啦啦啦www在线观看免费视频 | 午夜无码区在线观看 | 国产无遮挡又黄又爽免费视频 | 丁香花在线影院观看在线播放 | 国产精品怡红院永久免费 | 荫蒂被男人添的好舒服爽免费视频 | 国产在线精品一区二区三区直播 | 久久熟妇人妻午夜寂寞影院 | 亚洲日韩一区二区三区 | 日本护士xxxxhd少妇 | 久久精品中文闷骚内射 | 成人性做爰aaa片免费看不忠 | 久久久中文久久久无码 | 久久久久成人精品免费播放动漫 | 露脸叫床粗话东北少妇 | 亚洲熟悉妇女xxx妇女av | 国产9 9在线 | 中文 | 波多野结衣av一区二区全免费观看 | 99久久精品午夜一区二区 | 国产成人无码av在线影院 | 亚洲精品无码国产 | 狠狠色噜噜狠狠狠狠7777米奇 | 成在人线av无码免费 | 天堂亚洲2017在线观看 | 国产精品理论片在线观看 | 乱人伦中文视频在线观看 | 中文字幕亚洲情99在线 | 成人精品天堂一区二区三区 | 日本一本二本三区免费 | 中文字幕人成乱码熟女app | 日韩精品久久久肉伦网站 | 中文字幕av日韩精品一区二区 | 国产亚av手机在线观看 | 牲欲强的熟妇农村老妇女 | 国产精品高潮呻吟av久久 | 国产激情无码一区二区app | 国产av无码专区亚洲a∨毛片 | 日本又色又爽又黄的a片18禁 | 少妇性俱乐部纵欲狂欢电影 | 久久亚洲中文字幕精品一区 | 高潮毛片无遮挡高清免费 | 久久久婷婷五月亚洲97号色 | 亚洲国产精品久久久久久 | 亲嘴扒胸摸屁股激烈网站 | 亚洲精品成人福利网站 | 久久亚洲精品成人无码 | 亚洲一区二区三区国产精华液 | 国产精品久久精品三级 | 国产成人无码专区 | 人妻熟女一区 | 性生交大片免费看女人按摩摩 | 99精品国产综合久久久久五月天 | 99麻豆久久久国产精品免费 | 欧美成人午夜精品久久久 | 天堂无码人妻精品一区二区三区 | 啦啦啦www在线观看免费视频 | 一本久久伊人热热精品中文字幕 | 好爽又高潮了毛片免费下载 | 丰满人妻一区二区三区免费视频 | 撕开奶罩揉吮奶头视频 | 中文精品无码中文字幕无码专区 | 少妇性荡欲午夜性开放视频剧场 | 国产一区二区三区四区五区加勒比 | 精品久久久中文字幕人妻 | 国产精品永久免费视频 | 无码一区二区三区在线观看 | 老头边吃奶边弄进去呻吟 | 日韩精品一区二区av在线 | 一二三四在线观看免费视频 | 精品一区二区不卡无码av | 欧美日韩精品 | 欧美老人巨大xxxx做受 | 99久久精品日本一区二区免费 | 亚洲色偷偷男人的天堂 | 牲欲强的熟妇农村老妇女 | 性色av无码免费一区二区三区 | 成人性做爰aaa片免费看不忠 | 欧美黑人乱大交 | 无码一区二区三区在线 | 成人一区二区免费视频 | 亚洲日韩中文字幕在线播放 | 四虎影视成人永久免费观看视频 | 亚洲精品国产精品乱码不卡 | 亚洲自偷自拍另类第1页 | 高中生自慰www网站 | 亚洲春色在线视频 | 亚洲精品无码人妻无码 | 中国大陆精品视频xxxx | 久久久精品人妻久久影视 | 亚洲欧洲无卡二区视頻 | 欧美乱妇无乱码大黄a片 | 久久久婷婷五月亚洲97号色 | 国产成人综合在线女婷五月99播放 | 亚洲一区二区三区在线观看网站 | 一区二区三区高清视频一 | 麻豆国产丝袜白领秘书在线观看 | 国产黑色丝袜在线播放 | 国产精品va在线观看无码 | 国产午夜无码精品免费看 | 日日碰狠狠丁香久燥 | 超碰97人人做人人爱少妇 | 伊人久久大香线蕉午夜 | 丁香啪啪综合成人亚洲 | 18无码粉嫩小泬无套在线观看 | 国内精品久久毛片一区二区 | 色窝窝无码一区二区三区色欲 | 欧美三级a做爰在线观看 | 国产精品免费大片 | 欧美日韩视频无码一区二区三 | 国产香蕉尹人综合在线观看 | 亚洲熟熟妇xxxx | 美女黄网站人色视频免费国产 | 国产精品视频免费播放 | 久久综合九色综合欧美狠狠 | 女高中生第一次破苞av | 久久国产精品偷任你爽任你 | 亚洲人成影院在线无码按摩店 | 国产成人亚洲综合无码 | 久久综合狠狠综合久久综合88 | 国内少妇偷人精品视频免费 | 在线成人www免费观看视频 | 亚洲区欧美区综合区自拍区 | 精品水蜜桃久久久久久久 | 日本一区二区更新不卡 | 国产成人综合美国十次 | 男女爱爱好爽视频免费看 | 欧美喷潮久久久xxxxx | 亚洲狠狠色丁香婷婷综合 | 国产乱人无码伦av在线a | 亚洲爆乳无码专区 | 亚洲日韩中文字幕在线播放 | 亚洲精品一区二区三区四区五区 | 丝袜足控一区二区三区 | 日韩av激情在线观看 | 男女猛烈xx00免费视频试看 | 久久精品女人的天堂av | 免费观看激色视频网站 | 亚洲熟妇色xxxxx欧美老妇y | 成人精品视频一区二区 | 欧美日韩久久久精品a片 | 领导边摸边吃奶边做爽在线观看 | 久久综合狠狠综合久久综合88 | √天堂资源地址中文在线 | 少女韩国电视剧在线观看完整 | 亚洲小说图区综合在线 | 又湿又紧又大又爽a视频国产 | 国产精品99爱免费视频 | 国产超碰人人爽人人做人人添 | 欧美大屁股xxxxhd黑色 | 欧美日韩一区二区三区自拍 | 日产国产精品亚洲系列 | 久久精品国产日本波多野结衣 | 少妇性l交大片欧洲热妇乱xxx | 亚洲s码欧洲m码国产av | 国精产品一品二品国精品69xx | 国产精品美女久久久久av爽李琼 | 乱码av麻豆丝袜熟女系列 | www成人国产高清内射 | 日本免费一区二区三区最新 | 国产色xx群视频射精 | 人人妻人人澡人人爽欧美一区九九 | 久久精品中文闷骚内射 | 无码国内精品人妻少妇 | 国产精品久久久午夜夜伦鲁鲁 | 国产精品久久久久久亚洲影视内衣 | 亚洲 激情 小说 另类 欧美 | 综合人妻久久一区二区精品 | 国内综合精品午夜久久资源 | 精品无码成人片一区二区98 | 在线播放免费人成毛片乱码 | 装睡被陌生人摸出水好爽 | a片免费视频在线观看 | 成人无码影片精品久久久 | 国内老熟妇对白xxxxhd | 欧美色就是色 | 夜夜影院未满十八勿进 | 亚洲国产精品无码一区二区三区 | 国产人妻大战黑人第1集 | 18无码粉嫩小泬无套在线观看 | 国内少妇偷人精品视频 | 双乳奶水饱满少妇呻吟 | 成人精品天堂一区二区三区 | 内射白嫩少妇超碰 | 一区二区三区高清视频一 | 精品乱子伦一区二区三区 | 日本在线高清不卡免费播放 | 小泽玛莉亚一区二区视频在线 | 好男人社区资源 | 好爽又高潮了毛片免费下载 | 人妻天天爽夜夜爽一区二区 | 久久久久成人片免费观看蜜芽 | 99久久亚洲精品无码毛片 | 亚洲国产日韩a在线播放 | 久久国产36精品色熟妇 | 67194成是人免费无码 | 一本久道久久综合婷婷五月 | 天天躁夜夜躁狠狠是什么心态 | 67194成是人免费无码 | 东京热无码av男人的天堂 | 无码国产乱人伦偷精品视频 | 伊人久久大香线蕉av一区二区 | 亚洲热妇无码av在线播放 | 色 综合 欧美 亚洲 国产 | 99riav国产精品视频 | 一区二区三区乱码在线 | 欧洲 | 国产精品鲁鲁鲁 | 天天综合网天天综合色 | 久久精品99久久香蕉国产色戒 | 九九综合va免费看 | 亚洲七七久久桃花影院 | 国产亚洲日韩欧美另类第八页 | 亚洲欧美精品aaaaaa片 | 国产亚洲精品久久久久久国模美 | 波多野结衣一区二区三区av免费 | 免费人成在线视频无码 | 少妇邻居内射在线 | 久久综合香蕉国产蜜臀av | 人妻少妇精品无码专区二区 | 午夜福利试看120秒体验区 | 久久久久久久久888 | 亚洲第一网站男人都懂 | 日本饥渴人妻欲求不满 | 国产精品无套呻吟在线 | 青青久在线视频免费观看 | 日产国产精品亚洲系列 | 久久久久久久久888 | 性色av无码免费一区二区三区 | 国产精品毛片一区二区 | 无码一区二区三区在线观看 | 乱人伦人妻中文字幕无码 | 亚洲成a人一区二区三区 | 日韩精品无码一区二区中文字幕 | a片在线免费观看 | 性色欲网站人妻丰满中文久久不卡 | 天天拍夜夜添久久精品 | 娇妻被黑人粗大高潮白浆 | 99国产精品白浆在线观看免费 | 精品无人国产偷自产在线 | 亚洲精品国产第一综合99久久 | 中文字幕无线码 | 又紧又大又爽精品一区二区 | 精品国产国产综合精品 | 亚洲精品欧美二区三区中文字幕 | 波多野结衣av一区二区全免费观看 | 极品尤物被啪到呻吟喷水 | 日韩精品久久久肉伦网站 | 少妇性l交大片 | 欧美丰满熟妇xxxx | 亚洲欧洲中文日韩av乱码 | 强开小婷嫩苞又嫩又紧视频 | 国内少妇偷人精品视频免费 | 狂野欧美激情性xxxx | 粉嫩少妇内射浓精videos | 国产精品久久久久9999小说 | 色诱久久久久综合网ywww | 久久久久人妻一区精品色欧美 | 欧美日韩一区二区三区自拍 | 奇米影视888欧美在线观看 | 欧美三级不卡在线观看 | 色综合久久中文娱乐网 | 成熟人妻av无码专区 | 色一情一乱一伦一视频免费看 | 国产免费久久精品国产传媒 | 无码人妻丰满熟妇区五十路百度 | 国内精品久久久久久中文字幕 | 亚洲欧洲日本综合aⅴ在线 | 青青草原综合久久大伊人精品 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 精品久久久久久亚洲精品 | 老子影院午夜伦不卡 | 日本xxxx色视频在线观看免费 | 蜜臀av无码人妻精品 | 亚洲一区二区三区偷拍女厕 | 无码国产乱人伦偷精品视频 | 在线观看免费人成视频 | 国精品人妻无码一区二区三区蜜柚 | 国产精品毛片一区二区 | 天堂亚洲2017在线观看 | 无遮挡啪啪摇乳动态图 | 日日摸夜夜摸狠狠摸婷婷 | 真人与拘做受免费视频 | 亚洲国产精品久久久天堂 | 亚洲乱亚洲乱妇50p | 亚洲精品成人av在线 | 久久亚洲精品中文字幕无男同 | 亚洲国产高清在线观看视频 | 人妻体内射精一区二区三四 | 亚洲日本一区二区三区在线 | 男女爱爱好爽视频免费看 | 人人妻在人人 | 久久久无码中文字幕久... | 在线天堂新版最新版在线8 | 人妻无码αv中文字幕久久琪琪布 | 中国大陆精品视频xxxx | 激情综合激情五月俺也去 | 18禁止看的免费污网站 | 欧美亚洲国产一区二区三区 | 爱做久久久久久 | 亚洲va中文字幕无码久久不卡 | 色 综合 欧美 亚洲 国产 | 亚洲七七久久桃花影院 | 欧美激情内射喷水高潮 | 亚洲一区二区三区播放 | 亚洲日韩av一区二区三区四区 | 亚洲经典千人经典日产 | 麻豆国产97在线 | 欧洲 | 97夜夜澡人人爽人人喊中国片 | 极品嫩模高潮叫床 | 精品一二三区久久aaa片 | 97精品国产97久久久久久免费 | 国内精品人妻无码久久久影院蜜桃 | 精品一区二区不卡无码av | 成人性做爰aaa片免费看 | 水蜜桃色314在线观看 | 亚拍精品一区二区三区探花 | 高潮毛片无遮挡高清免费视频 | 久久久国产精品无码免费专区 | 亚洲午夜久久久影院 | 久久久国产精品无码免费专区 | 久久国产精品_国产精品 | 四虎永久在线精品免费网址 | 久久亚洲精品成人无码 | 精品国产青草久久久久福利 | 九九综合va免费看 | 久久久久久久女国产乱让韩 | 国内丰满熟女出轨videos | 亚洲日本va午夜在线电影 | 中文字幕精品av一区二区五区 | 国精品人妻无码一区二区三区蜜柚 | 国产无遮挡又黄又爽免费视频 | 一本加勒比波多野结衣 | 综合激情五月综合激情五月激情1 | 在线播放亚洲第一字幕 | 蜜桃无码一区二区三区 | 67194成是人免费无码 | 美女扒开屁股让男人桶 | 无码人妻丰满熟妇区五十路百度 | 97久久超碰中文字幕 | 国产性生交xxxxx无码 | 综合人妻久久一区二区精品 | 亚洲天堂2017无码 | 中文字幕乱码人妻二区三区 | 日本熟妇大屁股人妻 | 久久亚洲日韩精品一区二区三区 | 永久免费观看国产裸体美女 | 免费国产成人高清在线观看网站 | 亚洲精品国产品国语在线观看 | 免费无码肉片在线观看 | 少妇性荡欲午夜性开放视频剧场 | 国产手机在线αⅴ片无码观看 | 全黄性性激高免费视频 | 亚洲自偷自偷在线制服 | 天天躁夜夜躁狠狠是什么心态 | 国产绳艺sm调教室论坛 | 国产亚洲欧美日韩亚洲中文色 | 99精品无人区乱码1区2区3区 | 国产av无码专区亚洲a∨毛片 | 精品成人av一区二区三区 | 精品成人av一区二区三区 | 免费无码的av片在线观看 | 亚洲乱码日产精品bd | 永久免费观看美女裸体的网站 | 精品人人妻人人澡人人爽人人 | 未满成年国产在线观看 | www国产亚洲精品久久久日本 | 国产成人无码一二三区视频 | 国产成人无码av在线影院 | 少妇性l交大片欧洲热妇乱xxx | 日韩人妻无码一区二区三区久久99 | 国产精品办公室沙发 | 国产精华av午夜在线观看 | 国内老熟妇对白xxxxhd | 免费国产成人高清在线观看网站 | 久久精品无码一区二区三区 | 免费无码的av片在线观看 | 亚洲s码欧洲m码国产av | 内射老妇bbwx0c0ck | 人人爽人人澡人人高潮 | 欧美精品一区二区精品久久 | 成人女人看片免费视频放人 | 国产午夜精品一区二区三区嫩草 | 国产精品久久久久久亚洲影视内衣 | a在线观看免费网站大全 | 一本色道婷婷久久欧美 | 色 综合 欧美 亚洲 国产 | 国产真实乱对白精彩久久 | 丝袜 中出 制服 人妻 美腿 | 国产精品亚洲综合色区韩国 | 大乳丰满人妻中文字幕日本 | 2019nv天堂香蕉在线观看 | 日韩成人一区二区三区在线观看 | 久久久久se色偷偷亚洲精品av | 亚洲人成影院在线观看 | 久久久久久av无码免费看大片 | 51国偷自产一区二区三区 | 日本饥渴人妻欲求不满 | 国产精品福利视频导航 | 人人妻人人藻人人爽欧美一区 | aa片在线观看视频在线播放 | 一本久道久久综合狠狠爱 | 中文精品久久久久人妻不卡 | 国产在线精品一区二区三区直播 | 国产美女精品一区二区三区 | 麻豆蜜桃av蜜臀av色欲av | 夜夜躁日日躁狠狠久久av | 久久久精品国产sm最大网站 | 久久99精品久久久久久 | 一本无码人妻在中文字幕免费 | 国产午夜亚洲精品不卡 | 67194成是人免费无码 | 国产精品无码成人午夜电影 | 国产乱码精品一品二品 | 亚洲综合在线一区二区三区 | 亚洲成a人片在线观看无码3d | 高清不卡一区二区三区 | 国产精品高潮呻吟av久久4虎 | 日韩精品a片一区二区三区妖精 | 久久久无码中文字幕久... | 国产精品爱久久久久久久 | 欧美 日韩 人妻 高清 中文 | 男人扒开女人内裤强吻桶进去 | 亚洲国产精品一区二区美利坚 | 国产亚洲欧美日韩亚洲中文色 | 亚洲精品成a人在线观看 | 日本xxxx色视频在线观看免费 | 国产一区二区三区影院 | 思思久久99热只有频精品66 | 夜精品a片一区二区三区无码白浆 | 亚洲成熟女人毛毛耸耸多 | 国产无套内射久久久国产 | 亚洲中文字幕久久无码 | 中文字幕无码视频专区 | 51国偷自产一区二区三区 | 麻豆av传媒蜜桃天美传媒 | 精品久久综合1区2区3区激情 | 无码吃奶揉捏奶头高潮视频 | 亚洲熟熟妇xxxx | 中文无码成人免费视频在线观看 | 精品日本一区二区三区在线观看 | 无套内谢老熟女 | 荫蒂添的好舒服视频囗交 | 免费乱码人妻系列无码专区 | 夜夜影院未满十八勿进 | 精品一二三区久久aaa片 | 日本一区二区三区免费播放 | 日日噜噜噜噜夜夜爽亚洲精品 | 99视频精品全部免费免费观看 | 乱码av麻豆丝袜熟女系列 | 免费无码肉片在线观看 | 久久成人a毛片免费观看网站 | 中文字幕无码免费久久9一区9 | 国产午夜亚洲精品不卡 | 亚洲狠狠色丁香婷婷综合 | 日韩av无码一区二区三区不卡 | 日韩少妇内射免费播放 | 99久久精品国产一区二区蜜芽 | 色五月丁香五月综合五月 | 一本大道久久东京热无码av | 国产婷婷色一区二区三区在线 | 少妇愉情理伦片bd | 国产一区二区三区精品视频 | 色综合久久88色综合天天 | 精品一区二区不卡无码av | 67194成是人免费无码 | 久精品国产欧美亚洲色aⅴ大片 | 沈阳熟女露脸对白视频 | 草草网站影院白丝内射 | 亚洲综合伊人久久大杳蕉 | 国产精品久久久一区二区三区 | 成人免费视频一区二区 | 免费观看的无遮挡av | 内射爽无广熟女亚洲 | 一本色道久久综合亚洲精品不卡 | 亚洲综合在线一区二区三区 | 99久久精品国产一区二区蜜芽 | 亚洲精品一区二区三区在线观看 | 欧美xxxx黑人又粗又长 | 无码午夜成人1000部免费视频 | 蜜桃臀无码内射一区二区三区 | 又大又黄又粗又爽的免费视频 | 天天爽夜夜爽夜夜爽 | 中文精品无码中文字幕无码专区 | 久久人人爽人人人人片 | 俺去俺来也在线www色官网 | 色综合视频一区二区三区 | 伊人久久大香线蕉午夜 | 一本色道久久综合亚洲精品不卡 | 99国产精品白浆在线观看免费 | 精品无码一区二区三区爱欲 | 未满成年国产在线观看 | 国产激情综合五月久久 | 精品无码国产一区二区三区av | 亚洲色偷偷男人的天堂 | 亚洲午夜久久久影院 | 精品无码av一区二区三区 | 97精品人妻一区二区三区香蕉 | av无码电影一区二区三区 | 99视频精品全部免费免费观看 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲精品欧美二区三区中文字幕 | 亚洲一区二区三区在线观看网站 | 东京无码熟妇人妻av在线网址 | 亚洲综合伊人久久大杳蕉 | 小泽玛莉亚一区二区视频在线 | 在教室伦流澡到高潮hnp视频 | 理论片87福利理论电影 | 无码人妻丰满熟妇区五十路百度 | 在线播放无码字幕亚洲 | 清纯唯美经典一区二区 | 西西人体www44rt大胆高清 | 成熟女人特级毛片www免费 | 日本精品久久久久中文字幕 | 欧美日韩在线亚洲综合国产人 | 精品国产成人一区二区三区 | 青青久在线视频免费观看 | 九九热爱视频精品 | 国产亚洲精品精品国产亚洲综合 | 日本精品久久久久中文字幕 | 欧美freesex黑人又粗又大 | 67194成是人免费无码 | 国产精品亚洲а∨无码播放麻豆 | 国产亚洲日韩欧美另类第八页 | 久热国产vs视频在线观看 | 天下第一社区视频www日本 | 国产suv精品一区二区五 | 久久久久久久久蜜桃 | 欧美35页视频在线观看 | 久久伊人色av天堂九九小黄鸭 | 给我免费的视频在线观看 | 国产明星裸体无码xxxx视频 | 国产精品久久国产精品99 | 日日躁夜夜躁狠狠躁 | 色偷偷人人澡人人爽人人模 | 色综合久久久无码网中文 | 久久亚洲中文字幕无码 | 亚洲中文字幕无码中字 | 国产福利视频一区二区 | 亚洲一区二区三区无码久久 | 国产精品人妻一区二区三区四 | 最新国产麻豆aⅴ精品无码 | 中国大陆精品视频xxxx | 88国产精品欧美一区二区三区 | 国产精品美女久久久久av爽李琼 | 日产国产精品亚洲系列 | 国产成人精品久久亚洲高清不卡 | 在线观看免费人成视频 | 精品人妻人人做人人爽夜夜爽 | 又粗又大又硬又长又爽 | 亚洲人成人无码网www国产 | 精品亚洲韩国一区二区三区 | 少妇性俱乐部纵欲狂欢电影 | 精品水蜜桃久久久久久久 | 亚洲国产精品无码久久久久高潮 | 久青草影院在线观看国产 | 黑人巨大精品欧美一区二区 | 成人三级无码视频在线观看 | 国产成人一区二区三区别 | 日本大香伊一区二区三区 | 欧美日韩一区二区免费视频 | 天堂在线观看www | 我要看www免费看插插视频 | 亚洲a无码综合a国产av中文 | 麻豆蜜桃av蜜臀av色欲av | 日韩欧美中文字幕在线三区 | 99精品国产综合久久久久五月天 | 国产精品无套呻吟在线 | 亚洲精品一区二区三区在线观看 | 在线欧美精品一区二区三区 | 成在人线av无码免观看麻豆 | 亚洲一区二区三区香蕉 | 无码播放一区二区三区 | 国产精品久久久久久亚洲毛片 | 亚洲无人区午夜福利码高清完整版 | 久久人人爽人人爽人人片av高清 | 亚洲啪av永久无码精品放毛片 | 久久亚洲日韩精品一区二区三区 | 少妇被黑人到高潮喷出白浆 | 色综合视频一区二区三区 | 中文毛片无遮挡高清免费 | 麻豆果冻传媒2021精品传媒一区下载 | 精品无人区无码乱码毛片国产 | 无遮挡国产高潮视频免费观看 | 国产亚洲人成在线播放 | 亚洲国产成人a精品不卡在线 | 日本一卡二卡不卡视频查询 | 国产精品久久久久9999小说 | 99久久人妻精品免费二区 | 亚洲国产成人a精品不卡在线 | 国产人成高清在线视频99最全资源 | 日日摸天天摸爽爽狠狠97 | 国产精品第一国产精品 | 亚洲色成人中文字幕网站 | 蜜臀aⅴ国产精品久久久国产老师 | 老太婆性杂交欧美肥老太 | 中文字幕无码日韩欧毛 | 十八禁真人啪啪免费网站 | 国产成人无码av一区二区 | 国产亚洲美女精品久久久2020 | 熟女体下毛毛黑森林 | 天堂а√在线地址中文在线 | 成 人影片 免费观看 | 少妇被粗大的猛进出69影院 | 国产va免费精品观看 | 水蜜桃av无码 | 亚洲色大成网站www国产 | 日韩精品乱码av一区二区 | 国产精品久久久久久亚洲毛片 | 亚洲欧美国产精品专区久久 | 亚洲熟熟妇xxxx | 国内精品人妻无码久久久影院 | 乌克兰少妇性做爰 | 欧美大屁股xxxxhd黑色 | 国产亚洲人成a在线v网站 | 欧美变态另类xxxx | 中文字幕av日韩精品一区二区 | 成人毛片一区二区 | 男女下面进入的视频免费午夜 | 国产精品久久久久久亚洲影视内衣 | 狠狠综合久久久久综合网 | 骚片av蜜桃精品一区 | yw尤物av无码国产在线观看 | 国产av人人夜夜澡人人爽麻豆 | 亚洲精品成a人在线观看 | 亚洲熟妇自偷自拍另类 | 小sao货水好多真紧h无码视频 | 免费中文字幕日韩欧美 | 国产精品igao视频网 | 免费无码一区二区三区蜜桃大 | 国产av一区二区三区最新精品 | 日本乱人伦片中文三区 | 日本成熟视频免费视频 | 大胆欧美熟妇xx | 亚洲色大成网站www | 日日橹狠狠爱欧美视频 | 丝袜人妻一区二区三区 | 中文字幕日韩精品一区二区三区 | 国产在热线精品视频 | 日本xxxx色视频在线观看免费 | 欧美人与禽zoz0性伦交 | а√资源新版在线天堂 | 国产高清不卡无码视频 | 成人免费无码大片a毛片 | 欧美日韩一区二区免费视频 | 人人澡人人妻人人爽人人蜜桃 | 亚洲综合伊人久久大杳蕉 | 中文字幕乱码人妻无码久久 | 啦啦啦www在线观看免费视频 | 天天综合网天天综合色 | 一本久道久久综合狠狠爱 | 成人无码视频在线观看网站 | 亚洲一区二区三区香蕉 | 久久久久99精品国产片 | 欧美freesex黑人又粗又大 | 久久 国产 尿 小便 嘘嘘 | 国产亚av手机在线观看 | 中文字幕乱码亚洲无线三区 | 九月婷婷人人澡人人添人人爽 | 在线成人www免费观看视频 | 成人精品一区二区三区中文字幕 | 国产特级毛片aaaaaa高潮流水 | 国精品人妻无码一区二区三区蜜柚 | 亚洲色大成网站www | 亚洲啪av永久无码精品放毛片 | 东京热男人av天堂 | 一本一道久久综合久久 | 欧美激情一区二区三区成人 | 狠狠躁日日躁夜夜躁2020 | 图片区 小说区 区 亚洲五月 | 一本久久a久久精品vr综合 | 3d动漫精品啪啪一区二区中 | 亚洲色无码一区二区三区 | 久久久久人妻一区精品色欧美 | 激情内射亚州一区二区三区爱妻 | 成人性做爰aaa片免费看 | 久久精品国产大片免费观看 | 天天拍夜夜添久久精品大 | 亚洲人交乣女bbw | 夫妻免费无码v看片 | 中文字幕人成乱码熟女app | 天天躁夜夜躁狠狠是什么心态 | 欧美老人巨大xxxx做受 | 国产激情无码一区二区app | 兔费看少妇性l交大片免费 | 欧美日韩精品 | 女人高潮内射99精品 | 高潮毛片无遮挡高清免费视频 | 久久久精品国产sm最大网站 | 日欧一片内射va在线影院 | 牲欲强的熟妇农村老妇女视频 | 97精品国产97久久久久久免费 | 天堂а√在线地址中文在线 | 国产精品美女久久久网av | 国产亚洲视频中文字幕97精品 | 国产午夜无码精品免费看 | 久久综合久久自在自线精品自 | 国内揄拍国内精品人妻 | 免费无码av一区二区 | 欧美日本精品一区二区三区 | 永久免费观看国产裸体美女 | 永久免费观看国产裸体美女 | 精品一二三区久久aaa片 | 搡女人真爽免费视频大全 | 久久www免费人成人片 | 欧美精品国产综合久久 | 亚洲一区二区三区 | 精品久久久久久亚洲精品 | 亲嘴扒胸摸屁股激烈网站 | 国产内射爽爽大片视频社区在线 | 性生交大片免费看l | 精品无码成人片一区二区98 | 性做久久久久久久免费看 | 国产性生大片免费观看性 | 俺去俺来也在线www色官网 | 免费观看激色视频网站 | 宝宝好涨水快流出来免费视频 | 午夜熟女插插xx免费视频 | 给我免费的视频在线观看 | 天天燥日日燥 | 免费国产黄网站在线观看 | 狠狠亚洲超碰狼人久久 | 无码人妻丰满熟妇区五十路百度 | 国内少妇偷人精品视频 | 日韩少妇白浆无码系列 | 国产一区二区三区四区五区加勒比 | 18禁黄网站男男禁片免费观看 | 天天躁日日躁狠狠躁免费麻豆 | 久久久久久久人妻无码中文字幕爆 | 亚洲无人区一区二区三区 | 性欧美videos高清精品 | 综合激情五月综合激情五月激情1 | 国产精品人人爽人人做我的可爱 | 欧洲精品码一区二区三区免费看 |