精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

漫談序列化之使用、原理、問題

存儲 存儲軟件
天天跟我說給我介紹對象對象,對象在哪里?哪里有對象?你倒是把對象拿給我看看啊!

[[377100]]

前言

天天跟我說給我介紹對象對象,對象在哪里?哪里有對象?

你倒是把對象拿給我看看啊!

拿去拿去 :

  1.  "name""小麗"
  2.  "age""22"
  3.  "sex""女" 

我去~

序列化概念

說到對象,是一個比較寬泛的概念,簡單的說,他就是類的一個實例,有狀態和行為,存活在內存中,一旦JVM停止運行,對象的狀態也會丟失。

那么如何將這個對象當前狀態進行一個記錄,使其可以進行存儲和傳輸呢?這就要用到序列化了:

序列化 (Serialization)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程

比如一個User對象,名字為小麗,年齡22,性別為女。現在要把這個User對象保存下來,不然要是這個對象被別人改成了男可咋辦。

所以我們就可以把它當前的狀態信息轉化成一種固定的格式,比如json格式:

  1.  "name""小麗"
  2.  "age""22"
  3.  "sex""女" 

所以上述的例子就是一個序列化過程,本身這個User對象存活在內存中,是無法直接進行數據持久化的,所以我們需要一些序列化的方式讓它可以進行保存傳輸:

比如xml、JSON、Protobuf、Serializable、Parcelable,這些都是可以進行序列化的方式。

所以關于序列化我們就有很多問題了:

  • 在java有Serializable的前提下,Android為什么設計出了Parcelable?
  • Parcelable一定比Serializable快嗎?
  • 為什么Java提供了Serializable的序列化方式,而不是直接使用json或者xml?
  • Serializable、Parcelable、Json等序列化方式我們該怎么選擇?

帶著這些問題,我們去看看序列化的世界。

Serializable

先說說Java中自帶的序列化方式——Serializable。

Serializable是java.io包中定義的、用于實現Java類的序列化操作而提供的一個語義級別的接口

只要我們實現Serializable接口,那么這個類就可以被ObjectOutputStream轉換為字節流,也就是進行了序列化。

使用

java:

  1. public class User implements Serializable { 
  2.     private static final long serialVersionUID=519067123721561165l; 
  3.      
  4.     private int id; 
  5.  
  6.     public int getId() { 
  7.         return id; 
  8.     } 
  9.  
  10.     public void setId(int id) { 
  11.         this.id = id; 
  12.     } 

kotlin:

  1. data class User(  
  2.     val id: Int 
  3. ) : Serializable 

這個變量如果不寫,系統也會自動生成。它的作用在于標示這個數據對象的一致性。

當序列化的時候,系統會把當前類的serialVersionUID寫入序列化的文件中,當反序列化的時候會去檢測這個serialVersionUID,看他是否和當前類的serialVersionUID一致,一樣則可以正常反序列化,如果不一樣就會報錯了。

如果我們不寫的話,在我們修改類的某些屬性之后,serialVersionUID就會改變。

所以我們手動指定serialVersionUID后,就能在修改類之后,讓系統認識序列化的過程中標示這是同一個類,從而保證最大限度來恢復數據。

原理

在Serializable的注釋中有提到,如果要想在序列化過程中做一些特殊的操作,可以實現這幾個特殊方法:

  • writeObject(),負責寫入對象的特定類,以便相應的readObject方法可以恢復它
  • readObject(),負責從流中讀取并恢復類字段

所以這兩個方法其實就是Serializable實現的關鍵。首先看看寫入方法writeObject(偽代碼):

  1. private void writeObject(){ 
  2.     //獲取類的描述信息ObjectStreamClass(里面包含了類名稱、類字段、serialVersionUID等,用到大量反射) 
  3.      desc = ObjectStreamClass.lookup(cl, true); 
  4.      //寫入元數據TC_OBJECT,代表是一個新對象 
  5.      bout.writeByte(TC_OBJECT); 
  6.      //寫入描述信息(從父類寫到子類) 
  7.      writeClassDesc(descfalse); 
  8.      //寫入serialVersionUID,serialVersionUID為空的情況下,序列化機制就會調用一個函數根據類內部的屬性等計算出一個hash值 
  9.      getSerialVersionUID(); 
  10.      //執行JVM的序列化操作 
  11.      defaultWriteFields(); 
  12.  
  13.  
  14. private void defaultWriteFields(Object obj, ObjectStreamClass desc){ 
  15.     //寫入基本數據類型 
  16.     bout.write(primVals, 0, primDataSize, false); 
  17.  
  18.     //寫入引用數據類型(又重新調用了writeObject方法) 
  19.     Object[] objVals = new Object[desc.getNumObjFields()]; 
  20.     for (int i = 0; i < objVals.length; i++) { 
  21.         writeObject(objVals[i],fields[numPrimFields + i].isUnshared()); 
  22.     } 

寫入數據的流程基本就這些,可以看到Serializable序列化的過程,其實就是一個寫入流的過程。然后就可以根據情況將二進制流保持為文件,或者包裝成ByteArrayOutStream寫入到內存中進行傳輸。

所以Serializable使用的范圍比較廣,可以作為文件保存下來,也可以作為二進制流對象用于內存中的傳輸。但是由于用到反射、IO,而且大量的臨時變量會引起頻繁的GC,所以效率不算高。

所以,為了提高在Android中對象傳輸的效率呢,Android就采用了新的序列化方式——Parcelable。

Parcelable

Parcelable是Android為我們提供的序列化的接口,是為了解決Serializable在序列化的過程中消耗資源嚴重,而Android本身的內存比較緊缺的問題,但是用法較為繁瑣,主要用于內存中數據的傳輸。

使用

java:

  1. public class User implements Parcelable { 
  2.     private int id; 
  3.  
  4.     protected User(Parcel in) { 
  5.         id = in.readInt(); 
  6.     } 
  7.  
  8.     @Override 
  9.     public void writeToParcel(Parcel dest, int flags) { 
  10.         dest.writeInt(id); 
  11.     } 
  12.  
  13.     @Override 
  14.     public int describeContents() { 
  15.         return 0; 
  16.     } 
  17.  
  18.     public static final Creator<User> CREATOR = new Creator<User>() { 
  19.         @Override 
  20.         public User createFromParcel(Parcel in) { 
  21.             return new User(in); 
  22.         } 
  23.  
  24.         @Override 
  25.         public User[] newArray(int size) { 
  26.             return new User[size]; 
  27.         } 
  28.     }; 
  29.  
  30.     public int getId() { 
  31.         return id; 
  32.     } 
  33.  
  34.     public void setId(int id) { 
  35.         this.id = id; 
  36.     } 
  1. androidExtensions { 
  2.     experimental = true 
  3.  
  4. @Parcelize 
  5. data class User(val name: String) : Parcelable 

原理

先說說Parcelable寫法中這幾個方法參數的意思:

  • createFromParcel,User(Parcel in) ,代表從序列化的對象中創建原始對象
  • newArray,代表創建指定長度的原始對象數組
  • writeToParcel,代表將當前對象寫入到序列化結構中。
  • describeContents,代表返回當前對象的內容描述。如果還有文件描述符,返回1,否則返回0。

好了,在了解Parcelable原理之前,我們先要了解下Parcel。

Parcel是一個容器,它主要用于存儲序列化數據,然后可以通過Binder在進程間傳遞這些數據

所以Parcel就是可以進行IPC通信的容器,同樣底層也是用到了Binder。(Binder在Android中真是無處不在啊)

  1. //寫入數據 
  2. Parcel parcle = Parcel.Obtain(); 
  3. parcel.writeString(String val); 
  4.  
  5. //讀取數據 
  6. parcel.setDataPosition(i); 
  7. parcel.readString(); 

再往底層就是Binder的原理了,也就是將數據寫到內核的共享內存中,然后其他進程可以從共享內存中進行讀取。

而Parcelable的實現就是基于這個Parcel容器,還記得剛才的幾個方法嗎:

  • writeToParcel,寫入數據到Parcel容器。
  • new User(in),從Parcel容器讀取數據。

Parcelable的原理就是如此啦。

思考問題

介紹完了兩種序列化方式,我們再來看看文章開頭的這些問題。

在java有Serializable的前提下,Android為什么設計出了Parcelable?

java中的序列化方式Serializable效率比較低,主要有以下原因:

  • Serializable在序列化過程中會創建大量的臨時變量,這樣就會造成大量的GC。
  • Serializable使用了大量反射,而反射操作耗時。
  • Serializable使用了大量的IO操作,也影響了耗時。

所以Android就像重新設計了IPC方式Binder一樣,重新設計了一種序列化方式,結合Binder的方式,對上述三點進行了優化,一定程度上提高了序列化和反序列化的效率。

Serializable、Parcelable、Json等序列化方式我們該怎么選擇?

先說說序列化的用處,主要用在三個方面:

1、內存數據傳輸

內存傳輸方面,主要用Parcelable。一是因為Parcelable在內存傳輸的效率比Serializable高。二是因為在Android中很多傳輸數據的方法中,自帶了對于Serializable、Parcelable類型的傳輸方法。比如:

  • Bundle.putParcelable,
  • Intent putExtra(String name, Parcelable value)

等等吧,基本上對象傳輸的方法都支持了,所以這也是Parcelable的優勢。

2、 數據持久化(本地存儲)

如果只針對Serializable和Parcelable兩種序列化方式,需要選擇Serializable。

首先,Serializable本身就是存儲到二進制文件,所以用于持久化比較方便。而Parcelable序列化是在內存中操作,如果進程關閉或者重啟的時候,內存中的數據就會消失,那么Parcelable序列化用來持久化就有可能會失敗,也就是數據不會連續完整。而且Parcelable還有一個問題是兼容性,每個Android版本可能內部實現都不一樣,知識用于內存中也就是傳遞數據的話是不影響的,但是如果持久化可能就會有問題了,低版本的數據拿到高版本可能會出現兼容性問題。

但是實際情況,對于Android中的對象本地化存儲,一般是以數據庫、SP的方式進行保存。

3、 網絡傳輸

而對于網絡傳輸的情況,一般就是使用JSON了。主要有以下幾點原因:

  • 輕量級,沒有多余的數據。
  • 與語言無關,所以能兼容所有平臺語言。
  • 易讀性,易解析。

Parcelable一定比Serializable快嗎?

正常情況下,對象在內存中進行傳輸確實是Parcelable比較快,但是Serializable是有緩存的概念的,有人做了一個比較有趣的實驗:

當序列化一個超級大的對象圖表(表示通過一個對象,擁有通過某路徑能訪問到其他很多的對象),并且每個對象有10個以上屬性時,并且Serializable實現了writeObject()以及readObject(),在平均每臺安卓設備上,Serializable序列化速度大于Parcelable 3.6倍,反序列化速度大于1.6倍.

具體原因就是因為Serilazable的實現方式中,是有緩存的概念的,當一個對象被解析過后,將會緩存在HandleTable中,當下一次解析到同一種類型的對象后,便可以向二進制流中,寫入對應的緩存索引即可。但是對于Parcel來說,沒有這種概念,每一次的序列化都是獨立的,每一個對象,都當作一種新的對象以及新的類型的方式來處理。

具體過程可以看看這篇:https://juejin.cn/post/6854573218334769166

為什么Java提供了Serializable的序列化方式,而不是直接使用json或者xml?

我覺得是歷史遺留問題。

有的人可能會想到各種理由,比如可以標記哪些類可以被序列化。又或者可以通過UID來標示反序列化為同一個對象。等等。

但是我覺得最大的問題還是歷史遺留問題,在以前,json還沒有成為大家認同的數據結構,所以Java就設計出了Serializable的序列化方式來解決對象持久化和對象傳輸的問題。然后Java中各種API就會依賴于這種序列化方式,這么些年過去了,Java體系的龐大也造成難以改變這個問題,牽一發而動全身。

為什么我這么說呢?

主要有兩點依據:

  • 曾經Oracle Java平臺組的架構師說過,刪除Java的序列化機制并且提供給用戶可以選擇的序列化方式(比如json)是他們計劃中的一部分,因為Java序列化也造成了很多Java漏洞。具體可以參見文章:https://www.infoworld.com/article/3275924/oracle-plans-to-dump-risky-java-serialization.html
  • 因為在Serializable類的介紹注釋中,明確說到推薦大家選擇JSON 和 GSON庫,因為它簡潔、易讀、高效。
  1. <h3>Recommended Alternatives</h3> 
  2.  <strong>JSON</strong> is concise, human-readable and efficient. Android 
  3.  includes both a {@link android.util.JsonReader streaming API} and a {@link 
  4.  org.json.JSONObject tree API} to read and write JSON. Use a binding library 
  5.  like <a href="http://code.google.com/p/google-gson/">GSON</a> to read and 
  6.  write Java objects directly. 

Android體系架構

連載文章、腦圖、面試專題:

https://github.com/JiMuzz/Android-Architecture

參考

https://developer.android.google.cn/reference/android/os/Parcel?hl=en https://blog.csdn.net/lwj_zeal/article/details/90743500 https://juejin.cn/post/6854573218334769166#heading http://blog.sina.com.cn/s/blog_6e07f1eb0100rsax.html https://www.zhihu.com/question/283510695 https://www.infoworld.com/article/3275924/oracle-plans-to-dump-risky-java-serialization.html

本文轉載自微信公眾號「碼上積木」,可以通過以下二維碼關注。轉載本文請聯系碼上積木公眾號。

 

責任編輯:武曉燕 來源: 碼上積木
相關推薦

2024-10-24 11:08:00

C#AOT泛型

2019-11-20 10:07:23

web安全PHP序列化反序列化

2022-08-06 08:41:18

序列化反序列化Hessian

2009-08-28 10:18:48

Java序列化

2011-06-01 15:05:02

序列化反序列化

2009-08-24 17:14:08

C#序列化

2010-01-08 13:25:07

ibmdwXML

2009-03-10 13:38:01

Java序列化字節流

2011-06-01 15:18:43

Serializabl

2011-04-02 13:47:01

2018-03-19 10:20:23

Java序列化反序列化

2009-08-06 11:16:25

C#序列化和反序列化

2023-12-13 13:49:52

Python序列化模塊

2011-05-18 15:20:13

XML

2023-11-13 23:06:52

Android序列化

2023-06-29 08:41:02

2013-03-11 13:55:03

JavaJSON

2021-09-23 15:18:26

YAMLLinux

2024-11-11 11:51:07

2009-06-14 22:01:27

Java對象序列化反序列化
點贊
收藏

51CTO技術棧公眾號

亚洲欧美激情国产综合久久久| 老女人性淫交视频| 综合久久av| 亚洲国产精品综合小说图片区| 久久99精品久久久久久三级| 精品久久久久久久久久久国产字幕 | 99久久99久久精品国产片桃花| 欧美一级二级三级蜜桃| 无码精品a∨在线观看中文| 69久久夜色| a美女胸又www黄视频久久| 国产成人精品在线播放| 久久精品性爱视频| 久久视频在线| 亚洲精品自拍第一页| 国产三级精品三级在线| 裤袜国产欧美精品一区| 亚洲综合色区另类av| 亚洲成人18| 风流老熟女一区二区三区| 美女视频黄频大全不卡视频在线播放| 国内免费精品永久在线视频| 亚洲女人毛茸茸高潮| 尤物tv在线精品| 欧美成人一区二区三区在线观看| 成人a视频在线观看| 欧美精品一级片| 日韩在线观看| 亚洲人成网7777777国产| 美女伦理水蜜桃4| 日韩黄色三级| 在线观看一区日韩| 日韩欧美xxxx| 午夜裸体女人视频网站在线观看| 一区二区三区蜜桃| av不卡在线免费观看| 成人三级黄色免费网站| 久久综合九色综合97婷婷女人| 99久久精品免费看国产一区二区三区| 中文字幕一区二区在线视频| 久久午夜精品| 日韩av不卡在线| 日韩色图在线观看| 国产女优一区| 97在线视频一区| 日本少妇毛茸茸高潮| 欧美日韩亚洲国产精品| 欧美大胆在线视频| 欧洲美女女同性互添| 手机在线一区二区三区| 深夜福利一区二区| 一级在线观看视频| 久久精品99久久无色码中文字幕| 亚洲色图15p| 久久成人激情视频| 欧美亚洲在线日韩| 中日韩美女免费视频网站在线观看| 成人免费av片| 欧美老女人另类| 色午夜这里只有精品| 国产又色又爽又高潮免费| 午夜精品久久久久久久四虎美女版| 日韩在线激情视频| 欧美另类videoxo高潮| 51精产品一区一区三区| 欧美裸体xxxx极品少妇| 国产大片aaa| 香蕉久久夜色精品| 国产精品国产三级国产aⅴ浪潮 | 日韩一区二区高清| 蜜桃色一区二区三区| 国产精伦一区二区三区| 日韩精品中文字幕在线播放| 色无极影院亚洲| 成人婷婷网色偷偷亚洲男人的天堂| 色爱av美腿丝袜综合粉嫩av| 国产性xxxx| 136国产福利精品导航网址| 51色欧美片视频在线观看| 无码人妻av一区二区三区波多野| 美女性感视频久久| 亚洲精品日韩av| 天天操天天干天天爽| 国产欧美日韩亚州综合| 天天干天天色天天爽| 97蜜桃久久| 欧美三区在线观看| 国产香蕉精品视频| 禁断一区二区三区在线| 超薄丝袜一区二区| 日韩精品在线免费视频| 久久超级碰视频| 极品日韩久久| 日本视频在线观看| 欧美日韩国产激情| 中文av字幕在线观看| 欧美色图五月天| 日韩一区二区久久久| 日本熟妇成熟毛茸茸| 美女性感视频久久| 久久www免费人成精品| 美女av在线播放| 精品日韩视频在线观看| 91香蕉视频在线观看视频| 五月天亚洲一区| 欧美精品少妇videofree| 日韩人妻精品中文字幕| 国产精品18久久久久久久久久久久| 蜜桃久久影院| 激情网站在线| 欧美日韩国产在线观看| 日韩aaaaa| 亚洲一区色图| 国产精品一区二区电影| 日本又骚又刺激的视频在线观看| 亚洲精品欧美激情| 亚洲福利精品视频| 亚洲调教一区| 国模叶桐国产精品一区| 国产日韩欧美视频在线观看| 日本一区二区三区在线不卡| 伊人成色综合网| 77成人影视| 久久久久北条麻妃免费看| 国产女主播喷水视频在线观看 | 亚洲国产精品第一区二区| 成人综合国产精品| 91涩漫在线观看| 欧美午夜视频在线观看| 亚洲av永久无码精品| 欧美va天堂| 成人欧美一区二区三区在线| av在线电影观看| 在线观看一区不卡| 级毛片内射视频| 老牛影视一区二区三区| 蜜桃av色综合| 久久r热视频| 亚洲全黄一级网站| 亚洲欧美综合自拍| 26uuu精品一区二区三区四区在线| 日韩成人三级视频| 一区二区三区在线免费看 | 国产麻豆久久| 亚洲天堂av图片| 无码任你躁久久久久久久| 久久综合久久鬼色| 人人爽人人av| 日韩久久精品网| 成人黄色在线观看| 成人福利在线观看视频| 欧美xingq一区二区| 四虎免费在线视频| 风流少妇一区二区| 男人日女人视频网站| 欧美激情极品| 日韩av黄色在线观看| 成人在线免费公开观看视频| 欧美熟乱第一页| 国产一区二区三区视频播放| 国内精品在线播放| 毛片在线视频观看| 欧美18xxxx| 国产极品精品在线观看| 日本免费在线观看| 日韩亚洲欧美在线观看| 国产 日韩 欧美 成人| 26uuu另类欧美| 欧美黄色一级片视频| 久久香蕉国产| 痴汉一区二区三区| 日本午夜大片a在线观看| 亚洲性生活视频| 国产免费av观看| 亚洲国产精品影院| 亚洲精品成人无码| 狠狠色伊人亚洲综合成人| 亚洲午夜精品福利| 97久久综合精品久久久综合| 91精品国产高清久久久久久| 久久网站免费视频| 国产www在线| 国产日韩欧美精品一区| 亚洲怡红院在线| 欧美午夜视频| 国产区二精品视| 成人在线免费| 97精品免费视频| 欧美成年黄网站色视频| 亚洲电影免费观看高清| 中文字幕 人妻熟女| 亚洲柠檬福利资源导航| 亚洲国产精品无码久久久久高潮 | 免费观看黄色av| 日本乱人伦一区| 久久国产精品波多野结衣av| 久久日韩精品一区二区五区| 无套内谢丰满少妇中文字幕 | 欧美资源在线观看| 国产三区视频在线观看| 亚洲欧美在线看| xxxwww在线观看| 欧美亚洲国产一区二区三区va| 久久免费少妇高潮99精品| 国产色91在线| 中文字幕视频观看| 久久国产剧场电影| 各处沟厕大尺度偷拍女厕嘘嘘| 欧美~级网站不卡| 日韩资源av在线| 欧美a大片欧美片| 91av免费看| 日韩黄色碟片| 国产精品精品久久久| 日本午夜大片a在线观看| 欧美高清无遮挡| 欧美jizzhd欧美| 国产亚洲视频在线观看| 视频一区二区在线播放| 精品久久久久久无| 国产丝袜在线视频| 欧美剧在线免费观看网站| 看黄色一级大片| 精品日韩美女的视频高清| 国产主播在线观看| 一二三四社区欧美黄| 任我爽在线视频| 欧美国产欧美综合| 亚洲激情视频小说| 99久久99久久精品免费看蜜桃| 中文字幕无码毛片免费看| 韩国一区二区三区| 亚洲午夜精品一区| 美国三级日本三级久久99| 日韩亚洲在线视频| 日日摸夜夜添夜夜添国产精品| 成人免费观看视频在线观看| 亚洲精选国产| 国自产拍偷拍精品啪啪一区二区| 国产一区二区三区四区三区四| 蜜臀av性久久久久蜜臀av| 国产精品久久久久久| 一本—道久久a久久精品蜜桃| 日本久久精品| 亚洲欧洲精品一区二区三区波多野1战4 | 忘忧草在线影院两性视频| 国内成人精品视频| 久久久男人天堂| 奇门遁甲1982国语版免费观看高清| 嗯啊主人调教在线播放视频 | 亚洲精品a区| av电影成人| 国产伦精品一区二区三区免费优势| 国产成人精品福利一区二区三区| 97超碰成人| 精品国产福利| 色棕色天天综合网| 色噜噜色狠狠狠狠狠综合色一| 日韩精品欧美| 经典三级在线视频| 激情视频一区| 亚洲精品中文字幕无码蜜桃| 美女视频网站久久| 欧美日韩一区二区区别是什么 | 国产精品大全| 亚洲va久久| 亚洲精品一区二| 亚洲综合色网| 男人用嘴添女人下身免费视频| 国产亚洲精品bv在线观看| 免费激情视频在线观看| 精品一区二区三区免费观看 | 欧美激情视频给我| 在线天堂资源www在线污| 国产精品美女网站| 欧美2区3区4区| 久久超碰亚洲| 欧美成免费一区二区视频| 91黄色在线看| 日韩精品亚洲专区| 免费国偷自产拍精品视频| 91小视频在线免费看| 国产精品麻豆免费版现看视频| 一区二区三区欧美久久| 亚洲欧美偷拍一区| 制服丝袜中文字幕一区| 四虎国产精品永远| 久久精品91久久香蕉加勒比 | 欧美日韩中国免费专区在线看| 国产精品国产精品国产| 精品捆绑美女sm三区| 91网在线播放| 91精品国产高清久久久久久| 9999精品免费视频| 久久国产日韩欧美| 亚洲精品小说| 黄色片视频在线播放| 国产精品一品视频| 精品亚洲aⅴ无码一区二区三区| 尤物av一区二区| 中文字幕 亚洲视频| 亚洲精品在线免费观看视频| 日本高清中文字幕在线| 69久久夜色精品国产69乱青草| 亚洲美女色播| 欧美尤物一区| 亚洲欧洲一区二区天堂久久| 亚洲成人福利在线| 91老司机福利 在线| 久久国产精品波多野结衣av| 欧美剧在线免费观看网站| 国产人成在线观看| 91av福利视频| jizz久久精品永久免费| 伊人av成人| 日本不卡视频在线| aa片在线观看视频在线播放| 亚洲精品写真福利| 92久久精品一区二区| 亚洲欧美日韩在线一区| www.九色在线| 粉嫩高清一区二区三区精品视频| 我不卡伦不卡影院| 亚洲免费一级视频| 久久精品视频在线免费观看 | 色呦呦网站在线观看| 91精品国产综合久久香蕉最新版 | 欧美高清视频免费观看| 电影91久久久| 在线观看成人av电影| 美女在线观看视频一区二区| 夜夜春很很躁夜夜躁| 亚洲成人你懂的| 好吊色在线观看| 久久久久久久激情视频| 亚洲网址在线观看| 欧美成人精品免费| 成人成人成人在线视频| 国产在线视频第一页| 日韩精品中文字幕在线一区| 亚洲欧美成人影院| 91久久精品www人人做人人爽| 综合久久十次| 日韩大尺度视频| 亚洲高清在线精品| 日本美女一级片| 欧美一级电影久久| 亚洲品质自拍| 成人3d动漫一区二区三区| 国产欧美日韩视频一区二区| 中文字幕视频在线播放| www.欧美三级电影.com| 3d动漫一区二区三区在线观看| 中文字幕一区二区三区四区五区| 精品无码三级在线观看视频| 老司机成人免费视频| 欧美不卡一区二区三区四区| 成年网站在线视频网站| 国内精品一区二区| 久久久水蜜桃av免费网站| 无码一区二区三区在线| 欧美三级电影网站| caopo在线| 久久精品日产第一区二区三区精品版 | 国产精品玖玖玖| 欧美日韩国产999| 麻豆精品av| 亚洲免费看av| 一区二区三区精品久久久| 熟妇人妻一区二区三区四区| 日本一区二区三区在线播放| 日韩在线观看一区| 中文字幕一区二区三区人妻在线视频 | 一二三区免费视频| 日韩中文第一页| av成人资源网| 99视频免费播放| 一区二区三区在线视频观看58| 日本美女一级片| 国产精品永久免费在线| 欧美视频四区| 日本少妇高潮喷水xxxxxxx| 欧美电影影音先锋| 538视频在线| 亚洲国产精品视频一区| 高清不卡一二三区| 日本黄色中文字幕| 欧美日本黄视频| 国产成人一区| 色男人天堂av| 日本久久精品电影| 9191在线播放| 日韩欧美视频第二区| 国产91精品入口| 中文字幕一区二区人妻| 91国内精品久久| 亚洲精品久久| 午夜影院黄色片| 日韩精品在线观看一区二区| 涩涩屋成人免费视频软件|