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

JS中的二進制操作簡介

開發(fā) 前端
現(xiàn)今世界上幾乎所有的計算機體系結(jié)構(gòu)都是以字節(jié)(byte)為二進制數(shù)據(jù)的基本單位(注:不是說最小單位),所以二進制常常以字節(jié)數(shù)組的形式存在于程序當中。例如在C#里面,就用byte[],標準C里面沒有byte類型,但可以通過typedef把byte定義為unsigned char的別名,效果是一樣的。

JS中的二進制操作簡介

寫這篇博客的起源是小胡子哥的一篇文章《你所不知道的JavaScript數(shù)組你所不知道的JavaScript數(shù)組》。

因為隨著XHR2和現(xiàn)代瀏覽器的普及,在瀏覽器當中處理二進制不再向過去那樣無所適從,隨著Canvas/WebGL等新技術逐漸開始進入大眾視野,也會用到一些字節(jié)數(shù)組或者16位、8位整數(shù)等東西。在node.js剛剛發(fā)布的4.0版本中,Buffer的底層使用了更符合JS標準的Uint8Array來實現(xiàn),瀏覽器和node.js再次向相同的目標靠近了一點點,所以對于JS中處理二進制,我就打算寫這篇文章作一個入門性質(zhì)的流水賬,方便一些對二進制處理不了解的同學快速入門,雖然在前端領域用到的不多,不過也可以作為茶余飯后的休閑談資。

二進制數(shù)據(jù)在JS程序里的表達

現(xiàn)今世界上幾乎所有的計算機體系結(jié)構(gòu)都是以字節(jié)(byte)為二進制數(shù)據(jù)的基本單位(注:不是說最小單位),所以二進制常常以字節(jié)數(shù)組的形式存在于程序當中。例如在C#里面,就用byte[],標準C里面沒有byte類型,但可以通過typedef把byte定義為unsigned char的別名,效果是一樣的。

JS設計之初似乎根本沒想過要處理二進制的東西,加上對類型的極度弱化,對于字節(jié)的概念可以說是非常非常的模糊。如果要表達字節(jié)數(shù)組,那么似乎只能用一個普通數(shù)組來表示。

HTML5體系引入了一大堆新的東西,比如XHR2,是可以上傳或下載二進制內(nèi)容的,與之配套的東西就是JS里的ArrayBuffer和Typed Array了。

ArrayBuffer是一個固定長度的字節(jié)序列,你可以通過new ArrayBuffer(length)來得到一片空間,或者用下文將會介紹的方法從XHR2等途徑獲取。由于內(nèi)部實現(xiàn)與數(shù)組不一樣,ArrayBuffer通常都是連續(xù)內(nèi)存(注意,這只是經(jīng)驗之談,并不是規(guī)范也不是文檔所明確的),因此對于高密度的訪問操作而言它比JS中的Array速度會快很多(但并不要用它來簡單地代替Array)。如果用Chrome的Profile工具查看Heap Snapshot,會發(fā)現(xiàn)ArrayBuffer會被單獨列為一類,也許它的內(nèi)存分配和布局與Array以及其他JS對象有一些差別吧。

ArrayBuffer是不能直接被訪問的,因此需要借助Typed Array。Typed Array是一組具體數(shù)據(jù)類型的Array-Like類型的統(tǒng)稱,包括

  • Int8Array 8位有符號整數(shù),類似于C里面的char
  • Uint8Array 8位無符號整數(shù),類似于C里面的unsigned char
  • Uint8ClampedArray 8位無符號整數(shù),跟Uint8類似,但在溢出處理上不大一樣
  • Int16Array 后面這些類型就不羅嗦了
  • Uint16Array
  • Int32Array
  • Uint32Array
  • Float32Array
  • Float64Array

Typed Array的背后是一個ArrayBuffer,也就是說,事實上的數(shù)據(jù)是存在ArrayBuffer里面的,而Typed Array只是給你提供了一個某種類型的讀寫接口,用MDN的話說,叫做

Multiple views on the same data

舉個栗子,如果我們有一個ArrayBuffer名為buffer(先不考慮怎么構(gòu)造這個測試數(shù)據(jù)),內(nèi)容如下:

  1. 01 02 03 04 05 06 07 08 

也就是說它有8個字節(jié),我們分別用它來構(gòu)造Uint8Array, Uint16Array, Uint32Array,則可以得到

  1. var u8 = new Uint8Array(buffer); // length為8 
  2.  
  3. var u16 = new Uint16Array(buffer); // length為4 
  4.  
  5. var u32 = new Uint32Array(buffer); // length為2  

它們的內(nèi)容分別為

  1. [1, 2, 3, 4, 5, 6, 7, 8] 
  2.  
  3. [513, 1027, 1541, 2055] 
  4.  
  5. [67305985, 134678021]  

這不難理解。

可以看出,如果要手工構(gòu)造上面的測試數(shù)據(jù)ArrayBuffer,用Uint8Array就會很方便(呃事實上這是我個人最常用的一種Typed Array)。

而如果用同樣的ArrayBuffer構(gòu)建帶符號整數(shù)類型,則可能因為整數(shù)溢出而得到不同的結(jié)果,上面的例子并沒有碰到,有興趣的話可以自己試試。因此使用Typed Array也可以用來做有符號數(shù)和無符號數(shù)的轉(zhuǎn)換。

如果你用過canvas的getImageData/putImageData的話,會發(fā)現(xiàn)它給你的就是一個Uint8ClampedArray,這東西訪問起來速度比JS的原生Array快很多,使得對canvas進行高速的像素操作成為可能。

然而最最重要的一個概念還是:Typed Array不直接存放任何數(shù)據(jù),所有對Typed Array進行讀寫的操作,最終都會落實到它背后所持有的ArrayBuffer的身上。ArrayBuffer才是真正的raw bytes,而Typed Array只是一個操作窗口/操作視圖(View)。

獲取二進制數(shù)據(jù)

nodejs那邊先按住不表,這里談談在網(wǎng)頁里如何獲取二進制數(shù)據(jù)?常見的辦法有3種,1是通過XMLHttpRequest 2,2是通過File和Blob一套相關接口。

通過XMLHttpRequest 2

XHR2的接口跟XHR幾乎是一樣的,當制定xhr.responseType = 'arraybuffer'以后,在成功獲取數(shù)據(jù)的回調(diào)里就可以通過xhr.response來得到請求結(jié)果的ArrayBuffer了,然后就可以按照你的意愿來構(gòu)造各種Typed Array進行訪問。

responseType還可以有blob取值,可以用xhr.response獲得Blob對象。

通過File和Blob

在HTML5中提供了對表單的文件控件<input type="file" />更豐富的操作,可以通過inputDOM對象的.files來獲取一個FileList,當然通常瀏覽器都只提供了單選的文件控件,于是這里都只會有一個File對象。另外,通過拖拽、剪貼板等方式也能獲取到File或者Blob。

File繼承了Blob,并提供了name, lastModifiedDate等基礎元數(shù)據(jù),但是依然是一個深度封裝,不能直接獲取到它的二進制。

Blob是Binary large object的縮寫,它與ArrayBuffer的區(qū)別是除了raw bytes以外它還提供了mime type作為元數(shù)據(jù)。但它依然是無法直接被讀寫的。

這時候需要借助FileReader的幫忙。FileReader提供了一組用來將Blob讀取為更為實用的類型的方法

  1. readAsArrayBuffer() 
  2.  
  3. readAsBinaryString() 
  4.  
  5. readAsDataURL() 
  6.  
  7. readAsText()  

例如

  1. var file = get_file_some_how(); 
  2.  
  3. var fr = new FileReader(); 
  4.  
  5. fr.onload = function(e) { 
  6.  
  7. e.target.result; // 讀取的結(jié)果 
  8.  
  9. }; 
  10.  
  11. fr.readAsDataUrl(file); // readAsArrayBuffer  

可以干什么呢?例如圖片上傳之前的本地預覽(甚至基于canvas的編輯)等等都可以實現(xiàn)了。

Blob的其他構(gòu)造方法多而雜,這里就先不到處搬運文檔了。

消費二進制數(shù)據(jù)

何謂消費?最常見的方式也許就是通過XHR2直接把二進制數(shù)據(jù)以文件方式POST到服務端去。

這里我比較推薦使用FormData來構(gòu)造POST數(shù)據(jù)。因為在服務端收的時候會比較容易一些,具體有興趣可以去找找別人的例子。

雖然直接提交ArrayBuffer也是可以的,但是這種時候服務端收到的POST body會是一大團,用起來不方便。如果要使用FormData來提交ArrayBuffer,需要先將其構(gòu)造成Blob。

對Typed Array的構(gòu)造留個心眼

當使用new xxxxxArray(arrayBuffer)這個重載進行構(gòu)造的時候,它會默認基于此ArrayBuffer進行構(gòu)造。但當使用new xxxxArray(another_typed_array)這個重載的時候,則是進行“拷貝構(gòu)造”,這樣兩個Typed Array會指向不同的buffer,需要注意這是否符合預期。

如果需要基于同一個ArrayBuffer來構(gòu)造Typed Array,可以使用Typed Array的buffer, byteLength,byteOffset來獲取它背后的ArrayBuffer。

Tips(坑)

對內(nèi)存對齊留個心眼

當使用ArrayBuffer來構(gòu)造Typed Array的時候,可以指定byteOffset參數(shù),例如

  1. var buffer = get_array_buffer_some_how(); 
  2.  
  3. var i16 = new Int16Array(buffer, 10);  

上面的代碼就能以buffer向后偏移10字節(jié)處為起點來構(gòu)造Int16Array,但是如果將10設置為一個奇數(shù),會發(fā)現(xiàn)如下錯誤:

  1. RangeError: start offset of Int16Array should be a multiple of 2 

這是因為Typed Array對內(nèi)存對齊有要求,它不能在非對齊的位置建立,同理,Uint32Array和Int32Array則要求偏移量是4字節(jié)對齊的。

因此如果你希望在非對齊的位置進行讀寫,則需要借助DataView的幫忙。

對字節(jié)序留個心眼

我們?nèi)粘V兴鶎懙某绦颍瑤缀醵疾恍枰P心字節(jié)序,因此這個問題沒那么嚴重,知道自己的程序會有字節(jié)序問題的人,開發(fā)到這里也肯定會知道問題的存在,但這里還是稍微提一下。

按照MDN的說法,Typed Array只會使用當前平臺的字節(jié)序,例如我們現(xiàn)在用的桌面電腦不論PC還是Mac都是x86/x64的,也就是little-endian了。

使用DataView,不僅可以解決上面說到的內(nèi)存對齊的問題,還可以指定讀寫時的字節(jié)序,具體參數(shù)都在文檔里面了,就不搬運了。

使用DataView配合Typed Array也可以做到一個檢測當前平臺字節(jié)序的技巧:

  1. function isLittleEndian() { 
  2.  
  3. var buf = new ArrayBuffer(2); 
  4.  
  5. var view = new DataView(buf); 
  6.  
  7. view.setInt16(0, 256, true);//顯式以little endian寫入數(shù)據(jù) 
  8.  
  9. // 此時buf里的內(nèi)存布局應該是 00 01 
  10.  
  11.  
  12. var i16 = new Int16Array(buf); 
  13.  
  14. // 如果以little endian讀取,它就是256;以big endian讀取,則是1 
  15.  
  16. return (i16[0] === 256); 
  17.  
  18.  

如果你編寫的程序需要垮體系結(jié)構(gòu)例如x86/ARM/PPC等,則在交換文件和網(wǎng)絡包的時候需要謹慎處理字節(jié)序,當然一個辦法是在這些地方預先規(guī)范統(tǒng)一字節(jié)序以防后患。不過那些都是題外話了。

小結(jié)

使用ArrayBuffer來存儲一段字節(jié),使用Typed Array來構(gòu)建一個具體數(shù)值類型的訪問窗口,使用DataView對非對齊或在乎字節(jié)序的ArrayBuffer進行更精確的操作,使用XHR2, Blob, File, FileReader, FormData等多種方式來獲取或消費ArrayBuffer。

另外羅嗦一句,瀏覽器還提供了一系列所謂的“Binary String”,就是一些看起來像亂碼一樣的字符串,然后又提供了atob/btoa這種方式來對Base64和“Binary String”進行相互轉(zhuǎn)換,甚至FileReader還提供了readAsBinaryString方法(已經(jīng)廢棄了,善哉)。這個Binary String真是誰用誰遭殃,別問我為什么知道…… 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2009-12-16 10:49:42

Ruby操作二進制文件

2022-07-18 09:01:15

SwiftApple二進制目標

2009-02-27 09:37:33

Google二進制代碼

2009-11-02 11:27:42

VB.NET二進制文件

2010-10-13 15:45:23

MySQL二進制日志

2025-01-26 10:21:54

2022-10-31 08:02:42

二進制計算乘法

2018-10-22 14:37:16

二進制數(shù)據(jù)存儲

2022-09-28 08:01:33

JavaScript二進制

2024-03-14 10:31:33

JSbase64url

2011-05-25 14:10:38

浮點數(shù)

2021-11-10 09:15:00

CPU01 二進制Linux

2021-01-14 09:40:54

漏洞macOS屬性表文件

2015-07-21 11:43:14

CentosRPM

2022-07-26 13:00:01

安全符號源代碼

2010-06-09 13:02:29

MySQL啟用二進制日

2009-08-12 18:06:53

C#讀取二進制文件

2020-10-10 14:27:01

kubernetes 二進制部署

2010-04-16 09:42:25

Fedora 13Nvidia二進制驅(qū)動

2022-09-05 08:12:28

Google二進制Protobuf
點贊
收藏

51CTO技術棧公眾號

毛片在线视频观看| 国产精品久久久久久久久免费| 男人女人拔萝卜视频| 91视频欧美| 国产三级三级三级精品8ⅰ区| 国产精品自拍小视频| 久久国产露脸精品国产| 丝袜美腿一区二区三区动态图| 欧美影院午夜播放| 久久男人资源站| 国产1区2区3区在线| 国产精一区二区三区| 4k岛国日韩精品**专区| 中文字幕精品亚洲| 女同另类激情重口| 777xxx欧美| 国产免费人做人爱午夜视频| 国产在线观看av| 久久女同精品一区二区| 91福利入口| 免费黄色片视频| 亚洲小说区图片区| 久久精品青青大伊人av| 伊人网综合视频| 日韩午夜视频在线| 色综合久久综合网97色综合| 亚洲啊啊啊啊啊| 成人在线免费观看| 久久亚洲精品国产精品紫薇| 亚洲一区二区三区四区在线播放| 亚洲天堂男人av| 在线不卡亚洲| 欧美精品日韩www.p站| 一级黄色片网址| 日韩精品亚洲aⅴ在线影院| 日韩一区二区三区av| 97视频在线观看视频免费视频| 色一情一乱一伦一区二区三区丨| 国产精品一级视频| 日本伊人午夜精品| 欧美一区二区三区……| 久久久久久欧美精品se一二三四| 久久精品国产www456c0m| 亚洲免费高清视频| 亚洲成人日韩在线| 狼人天天伊人久久| 亚洲丁香婷深爱综合| 三大队在线观看| 高清一区二区| 在线播放中文字幕一区| 日韩一级理论片| 日韩精品影片| 欧美在线观看一二区| 大香煮伊手机一区| 日韩免费小视频| 欧美在线观看视频一区二区| 天天天干夜夜夜操| www成人在线视频| 欧美亚洲动漫制服丝袜| 另类小说第一页| 精品女同一区二区三区在线观看| 欧美亚州韩日在线看免费版国语版| 欧美黑人又粗又大又爽免费| 精品亚洲美女网站| 欧美影院一区二区三区| 亚洲精品短视频| 亚洲中文字幕无码中文字| tube8在线hd| 黄色91在线观看| 欧美色图另类小说| 精品国产第一福利网站| 在线观看日韩国产| 在线看的黄色网址| 亚洲网站三级| 欧美成人一区二区三区| 韩国三级hd两男一女| 国产精品白丝av嫩草影院| 九色精品国产蝌蚪| 亚洲第一福利一区| 99视频在线免费播放| 污视频在线免费观看网站| 亚洲av无码一区二区三区dv| 亚洲福利国产| 欧美一级淫片aaaaaaa视频| 在线观看精品国产| 成人在线观看免费网站| 中文字幕视频一区二区三区久| 亚洲午夜精品一区二区| 黄网页在线观看| 亚洲永久精品国产| 性一交一乱一伧国产女士spa| 欧美videosex性欧美黑吊| 欧美日韩中文字幕| 在线观看亚洲色图| 亚洲精品国产九九九| 亚洲欧美www| 国精品人伦一区二区三区蜜桃| 欧美www视频在线观看| 欧美黑人巨大xxx极品| 国产精品99精品| 青青草国产精品97视觉盛宴| 亚洲字幕在线观看| 日本不卡视频一区二区| 国产女主播视频一区二区| 黄色片免费在线观看视频| 日韩福利一区| 日韩一二三区视频| 国产jk精品白丝av在线观看| 欧美日韩视频| 国产精品无av码在线观看| 国产精品毛片一区二区在线看舒淇| 成人国产精品免费观看动漫| 亚洲国产一区二区三区在线播 | 中文字幕一区综合| 国产va在线视频| 在线不卡欧美精品一区二区三区| 特大黑人巨人吊xxxx| 中文字幕一区二区三区在线视频| 国内精品小视频| 国产精品无码白浆高潮| 久久综合九色综合久久久精品综合 | 国产精品一区二区女厕厕| 免费av一级片| 亚洲男人天堂一区| 99热一区二区| 91 在线视频| 亚州av乱码久久精品蜜桃| 热99精品里视频精品| 亚洲成人黄色片| 国产精品视频麻豆| 国产在线青青草| 97青娱国产盛宴精品视频| 一区二区三区久久精品| 高h视频免费观看| 美女视频网站黄色亚洲| 精品无人区一区二区三区竹菊| 国产1区在线| 日韩欧美成人网| 国产大尺度视频| 91精品国产自产在线观看永久∴| 国产成人亚洲综合91| 天天爱天天干天天操| 一区二区三区在线视频观看58| 亚洲欧美国产中文| 精品国产123区| 欧洲亚洲免费在线| mm131美女视频| 亚洲一本视频| 国产高清一区二区三区| 91高清在线观看视频| 欧美区视频在线观看| 九九热免费在线| 日韩av在线免费观看不卡| 免费在线观看一区二区| 自拍偷拍欧美视频| 亚洲精选一区二区| 青青青国产在线| 久久女同精品一区二区| 国产又黄又猛视频| 精品久久成人| 国产精品中文字幕在线| 91ph在线| 91精品国产高清一区二区三区蜜臀| 国产三级aaa| 国产久卡久卡久卡久卡视频精品| 国产女主播av| 成人另类视频| 欧美精品videosex性欧美| 欧美视频一二区| 欧美性猛交xxxx免费看久久久| 在线免费看黄视频| 蜜臀91精品一区二区三区| 一区国产精品| 91亚洲无吗| 欧美孕妇与黑人孕交| 成人在线视频成人| 91精品欧美一区二区三区综合在| 欧美不卡1区2区3区| 黄色网址在线免费观看| 日韩欧美激情四射| 国产污视频在线看| 久久久久久久综合狠狠综合| 污视频网址在线观看| 欧美日韩国产在线一区| 久久综合福利| 欧美日韩va| 欧美黑人性视频| 色在线免费视频| 欧美老人xxxx18| 国产精品第56页| 欧美激情在线看| 亚洲成人激情小说| 国产精品视区| 亚洲免费视频一区| 成人动漫视频| 国产精品久久久久一区二区| 99福利在线| 日韩电影在线观看永久视频免费网站 | 日本欧美在线| 欧美大肥婆大肥bbbbb| 自拍另类欧美| 亚洲2区在线| 国产不卡av在线| av免费在线观看网站| 日韩av综合网| 国产老妇伦国产熟女老妇视频| 亚洲成人av在线电影| 超碰97av在线| www.激情成人| 欧美丝袜在线观看| 国产一区二区你懂的| 在线观看欧美激情| 日韩深夜福利| 99国产在线观看| 色诱色偷偷久久综合| 欧美有码在线观看| 天天色天天射天天综合网| 在线观看亚洲区| 亚洲色大成网站www| 日韩视频免费观看高清在线视频| 亚洲国产av一区二区三区| 亚洲一区二区三区免费视频| 婷婷丁香综合网| 久久综合精品国产一区二区三区| 亚洲熟女乱综合一区二区| 麻豆国产精品一区二区三区 | 亚洲三区四区| 日韩欧美ww| 91九色蝌蚪成人| 婷婷丁香久久| 国产成人拍精品视频午夜网站| 国产精品电影| 欧美日产国产成人免费图片| 蜜桃视频网站在线观看| 亚洲性视频网站| 免费理论片在线观看播放老| 亚洲国产一区二区三区四区| 亚洲AV无码精品国产| 91精品综合久久久久久| 一区二区三区免费在线| 欧美日韩一级片网站| 男人天堂视频网| 一本久久综合亚洲鲁鲁五月天 | 在线视频综合导航| 人妻丰满熟妇av无码区| 大桥未久av一区二区三区| 亚洲精品77777| 亚洲丰满少妇videoshd| 九热这里只有精品| 亚洲国产综合视频在线观看| 精品少妇爆乳无码av无码专区| 亚洲欧美日本在线| jizz亚洲少妇| 亚洲最大成人网4388xx| 青青草原在线免费观看视频| 亚洲精品免费播放| 激情综合五月网| 亚洲成人tv网| 欧美在线观看不卡| 91国偷自产一区二区开放时间| 好吊色在线视频| 欧美性高清videossexo| 91精品国产乱码久久久| 欧美日韩国产影片| 国产乱淫片视频| 日韩欧美电影一区| 色婷婷av一区二区三| 日韩精品视频免费专区在线播放| 四虎影院在线域名免费观看| 亚洲欧洲国产伦综合| av福利在线播放| 久久艹在线视频| 男人的天堂免费在线视频| 欧美在线观看一区二区三区| av在线日韩| 亚洲自拍中文字幕| 久久97精品| 日韩免费中文专区| 亚洲国产精品久久久久蝴蝶传媒| 久久亚洲a v| 国产精品亚洲欧美| 日韩手机在线观看视频| 麻豆精品一区二区综合av| 久久精品一二三四| 日本在线播放| 久久亚洲一区二区三区四区五区高| 牛牛精品在线| 日产精品99久久久久久| 996久久国产精品线观看| 高清国语自产拍免费一区二区三区| 亚洲免费观看高清完整版在线观| 亚洲一区二区三区精品在线观看 | 成人另类视频| 日韩欧美亚洲精品| 欧美三级在线| 色综合天天色综合| 国产盗摄精品一区二区三区在线| 成人免费av片| 亚洲精品视频在线| 欧美亚洲另类小说| 欧美成人艳星乳罩| 国产区视频在线| 欧美日韩国产成人在线| 韩国精品主播一区二区在线观看| 91亚洲精品丁香在线观看| 国产精品日韩精品中文字幕| 女女同性女同一区二区三区按摩| 亚洲一区二区三区四区五区午夜| 伊人国产精品视频| 久久久久久久久久久电影| 欧美日韩在线视频免费| 欧美写真视频网站| 日本一区视频| 欧美丰满少妇xxxxx做受| 国产私拍福利精品视频二区| 国产一区二区久久久| 91精品秘密在线观看| 亚洲 中文字幕 日韩 无码| 成人国产电影网| 一区二区三区影视| 色94色欧美sute亚洲线路一久 | 黑人一区二区三区| 久久综合毛片| 在线不卡视频| 国产裸体视频网站| 中文字幕在线一区免费| 乱子伦一区二区三区| 精品呦交小u女在线| 成人三级小说| 99影视tv| 日韩毛片久久久| 久久精品国产网站| 精品久久久一区二区| 视频一区二区三| av影片在线看| 天天色天天操综合| 中文字幕乱妇无码av在线| 欧美日韩美女| 午夜精品久久久久久久久久| 国产美女99p| 超碰在线观看免费| 国产精品xxx视频| 神马久久影院| 欧美 丝袜 自拍 制服 另类| 成人免费电影视频| 久久久美女视频| 日韩视频免费观看高清在线视频| 国内精品久久久久久野外| 成人xvideos免费视频| 欧美超碰在线| 国产福利在线免费| 一区免费观看视频| 一级片aaaa| 不卡毛片在线看| 激情不卡一区二区三区视频在线| 99re99热| 懂色av一区二区三区免费看| 国产在线观看成人| 亚洲国产精品久久91精品| 国产在线88av| 久久综合一区| 日本麻豆一区二区三区视频| 国产又黄又粗的视频| 欧美日韩国产综合视频在线观看| 精品国产白色丝袜高跟鞋| 18成人免费观看网站下载| 韩国自拍一区| 三级黄色片网站| 91久久国产综合久久| 日本在线观看www| 成人动漫视频在线观看完整版| 亚洲图片在线| av在线网站观看| 欧美视频中文字幕| 亚洲丝袜一区| 久久久www免费人成黑人精品| 乱人伦精品视频在线观看| 精品人妻一区二区三区四区| 538在线一区二区精品国产| 免费网站在线观看人| 九色综合婷婷综合| 免费观看日韩电影| 欧美色图亚洲天堂| 亚洲国产精品久久久久秋霞蜜臀| 日韩av中字| 午夜探花在线观看| jiyouzz国产精品久久| 日本成人一级片| 欧美大片欧美激情性色a∨久久| 日韩手机在线| 国产探花在线观看视频| 黑人巨大精品欧美一区二区三区 | 久久久精品国产sm调教| 日韩成人在线电影网| 精品美女一区| 欧美大片在线播放| 中文字幕在线观看不卡视频| 四虎在线视频免费观看| 国产日产欧美精品| 99av国产精品欲麻豆|