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

淺談XML壓縮算法

開發 算法
在用XML傳輸數據的時候,XML本身的元素名稱,屬性名稱可能比有效的信息量占的地方還要大,本文示例一種簡單實用的算法來進行XML壓縮,主要思路是把XML標簽和屬性用整數來表示以便降低傳輸量。

XML壓縮單元測試代碼

  1. class Program {  
  2.    public static string XML = @"<?xml version=""1.0"" encoding=""utf-16""?> 
  3.     <Customer> 
  4. <CustomerID>ALFKI</CustomerID> 
  5. <PO>9572658</PO> 
  6. <Address AddressType=""work""> 
  7.     <Street>One Main Street</Street> 
  8.     <City>Anywhere</City> 
  9.     <State>NJ</State> 
  10.     <Zip>08080</Zip> 
  11. </Address> 
  12. <Order> 
  13.     <OrderID>10966</OrderID > 
  14.     <LineItem> 
  15.         <ProductID>37</ProductID> 
  16.         <UnitPrice>26.50 </UnitPrice> 
  17.         <Quantity>8</Quantity> 
  18.         <Description>Gravad lax </Description>               
  19.     </LineItem> 
  20.     <LineItem> 
  21.         <ProductID>56 </ProductID> 
  22.         <UnitPrice>38.00</UnitPrice> 
  23.         <Quantity>12</Quantity> 
  24.         <Description>Gnocchi di nonna Alice</Description>               
  25.     </LineItem> 
  26. </Order>      
  27. </Customer>";  
  28. static void Main(string[] args) {  
  29.     XmlZip zip = new XmlZip();  
  30.  
  31.     byte[] bs = Encoding.UTF8.GetBytes(XML);  
  32.     Console.WriteLine("原始文件長度:{0}", bs.Length);  
  33.     MemoryStream ms = new MemoryStream();  
  34.     DeflateStream compressedzipStream = new DeflateStream(ms, CompressionMode.Compress, true);  
  35.     compressedzipStream.Write(bs, 0, bs.Length);  
  36.     compressedzipStream.Close();  
  37.     Console.WriteLine("Deflate壓縮后長度: {0}", ms.Length);  
  38.  
  39.     zip.Init(XML);  
  40.     bs = zip.XmlToBytes(XML);  
  41.     Console.WriteLine("XML壓縮后長度:{0}", bs.Length);  
  42.     string str = zip.BytesToXml(bs);  
  43.     Console.WriteLine("還原后長度:{0}", Encoding.UTF8.GetByteCount(str));  
  44.     Console.WriteLine(str);  
  45.  
  46.  
  47.     ms = new MemoryStream();  
  48.     compressedzipStream = new DeflateStream(ms, CompressionMode.Compress, true);  
  49.     compressedzipStream.Write(bs, 0, bs.Length);  
  50.     compressedzipStream.Close();  
  51.     Console.WriteLine("先XML壓縮,再Deflate壓縮后的長度:{0}", ms.Length);  
  52.     Console.ReadKey();  
  53.  
  54. }  

測試輸出

原始文件長度:740

Deflate壓縮后長度: 438

XML壓縮后長度:295

還原后長度:727

  1. <?xml version="1.0" encoding="utf-16"?> 
  2. <Customer> 
  3.   <CustomerID>ALFKI</CustomerID> 
  4.   <PO>9572658</PO> 
  5.   <Address AddressType="work"> 
  6.     <Street>One Main Street</Street> 
  7.     <City>Anywhere</City> 
  8.     <State>NJ</State> 
  9.     <Zip>08080</Zip> 
  10.   </Address> 
  11.   <Order> 
  12.     <OrderID>10966</OrderID> 
  13.     <LineItem> 
  14.       <ProductID>37</ProductID> 
  15.       <UnitPrice>26.50 </UnitPrice> 
  16.       <Quantity>8</Quantity> 
  17.       <Description>Gravad lax </Description>               
  18.     </LineItem> 
  19.     <LineItem> 
  20.       <ProductID>56 </ProductID> 
  21.       <UnitPrice>38.00</UnitPrice> 
  22.       <Quantity>12</Quantity> 
  23.       <Description>Gnocchi di nonna Alice</Description>               
  24.     </LineItem> 
  25.   </Order> 
  26. </Customer> 

先XML壓縮,再Deflate壓縮后的長度:357

可以看到,XML壓縮后的數據約是原來數據的3分之一,可能沒有其它專有的壓縮算法的壓縮率高,但效果還算是滿意吧,而且我的算法是比較通用的,只要通信雙方知道了XML的Schema,甚至雙方只需要有一段完整的示例代碼,就可以進行壓縮通信,只做了功能測試,沒做性能測試,大家可以先借鑒下思路。

完整代碼

大致原理,就是通信雙方各持有一個XML文檔節點名稱,屬性名稱的一個字典,然后發送方傳輸的時候用ushort代替原有的XML標簽和屬性名,接收方通過字典把ushort再轉換成原始的元素名和屬性名,這樣大量不必要的重復的標簽等就省去了。

代碼只做本文的示例,寫的比較隨意,沒有什么防御性和健壯性。

  1. internal enum ItemType {  
  2.     Element,  
  3.     Attritube  
  4. }  
  5. internal class XmlNodeItem {  
  6.     public string Xpath { get; set; }  
  7.     public string Text { get; set; }  
  8.     public ItemType ItemType { get; set; }  
  9.     public override string ToString() {  
  10.         return Xpath;  
  11.     }  
  12. }  
  13. internal class MyXpath {  
  14.     LinkedList<string> _node = new LinkedList<string>();  
  15.     public void AddElement(string name) {  
  16.         _node.AddLast(string.Format("/{0}", name));  
  17.     }  
  18.     public void AddAttribute(string name) {  
  19.         _node.AddLast(string.Format("/@{0}", name));  
  20.     }  
  21.     public void RemoveLastElement() {  
  22.         _node.RemoveLast();  
  23.     }  
  24.     public override string ToString() {  
  25.         StringBuilder sb = new StringBuilder();  
  26.         LinkedListNode<string> node = _node.First;  
  27.         sb.Append(node.Value);  
  28.         while ((nodenode = node.Next) != null) {  
  29.             sb.Append(node.Value);  
  30.         }  
  31.         return sb.ToString();  
  32.     }  
  33. }  
  34. class XmlZip {  
  35.     Dictionary<ushort, XmlNodeItem> _map = new Dictionary<ushort, XmlNodeItem>();  
  36.     Dictionary<string, ushort> _map2 = new Dictionary<string, ushort>();  
  37.     MyXpath _path = new MyXpath();  
  38.  
  39.     public void Init(string xmlInput) {  
  40.         StringReader sr = new StringReader(xmlInput);  
  41.         XmlReader reader = XmlReader.Create(sr);  
  42.         MemoryStream ms = new MemoryStream();  
  43.         ushort i = 1;  
  44.         while (reader.Read()) {  
  45.             switch (reader.NodeType) {  
  46.                 case XmlNodeType.Element:  
  47.                     _path.AddElement(reader.Name);  
  48.                     _map[i++] = new XmlNodeItem() {  
  49.                         Xpath = _path.ToString(),  
  50.                         Text = reader.Name,  
  51.                         ItemTypeItemType = ItemType.Element  
  52.                     };  
  53.                     if (reader.HasAttributes) {  
  54.                         reader.MoveToFirstAttribute();  
  55.                         _path.AddAttribute(reader.Name);  
  56.                         _map[i++] = new XmlNodeItem() {  
  57.                             Xpath = _path.ToString(),  
  58.                             Text = reader.Name,  
  59.                             ItemTypeItemType = ItemType.Attritube  
  60.                         };  
  61.                         _path.RemoveLastElement();  
  62.                         while (reader.MoveToNextAttribute()) {  
  63.                             _path.AddAttribute(reader.Name);  
  64.                             _map[i++] = new XmlNodeItem() {  
  65.                                 Xpath = _path.ToString(),  
  66.                                 Text = reader.Name,  
  67.                                 ItemTypeItemType = ItemType.Attritube  
  68.                             };  
  69.                             _path.RemoveLastElement();  
  70.                         }  
  71.                         reader.MoveToElement();  
  72.                     }  
  73.                     if (reader.IsEmptyElement) _path.RemoveLastElement();  
  74.                     break;  
  75.                 case XmlNodeType.EndElement:  
  76.                     _path.RemoveLastElement();  
  77.                     break;  
  78.                 default:  
  79.                     break;  
  80.             }  
  81.         }  
  82.         foreach (KeyValuePair<ushort, XmlNodeItem> pair in _map) {  
  83.             _map2[pair.Value.Xpath] = pair.Key;  
  84.         }  
  85.     }  
  86.  
  87.     public byte[] XmlToBytes(string xmlInput) {  
  88.         StringReader sr = new StringReader(xmlInput);  
  89.         XmlReader reader = XmlReader.Create(sr);  
  90.         MemoryStream ms = new MemoryStream();  
  91.         BinaryWriter bw = new BinaryWriter(ms);  
  92.         while (reader.Read()) {  
  93.             ushort index;  
  94.             byte[] bs;  
  95.             switch (reader.NodeType) {  
  96.                 case XmlNodeType.Element:  
  97.                     _path.AddElement(reader.Name);  
  98.                     if (_map2.TryGetValue(_path.ToString(), out index)) {  
  99.                         bw.Write(index);  
  100.                     }  
  101.                     if (reader.HasAttributes) {  
  102.                         reader.MoveToFirstAttribute();  
  103.                         _path.AddAttribute(reader.Name);  
  104.                         if (_map2.TryGetValue(_path.ToString(), out index)) {  
  105.                             _path.RemoveLastElement();  
  106.                             bw.Write(index);  
  107.                             bs = Encoding.UTF8.GetBytes(reader.Value);  
  108.                             bw.Write((ushort)bs.Length);  
  109.                             bw.Write(bs);  
  110.                         }  
  111.                         while (reader.MoveToNextAttribute()) {  
  112.                             _path.AddAttribute(reader.Name);  
  113.                             if (_map2.TryGetValue(_path.ToString(), out index)) {  
  114.                                 _path.RemoveLastElement();  
  115.                                 bw.Write(index);  
  116.                                 bs = Encoding.UTF8.GetBytes(reader.Value);  
  117.                                 bw.Write((ushort)bs.Length);  
  118.                                 bw.Write(bs);  
  119.                             }  
  120.                         }  
  121.                         reader.MoveToElement();  
  122.                     }  
  123.                     if (reader.IsEmptyElement) {  
  124.                         _path.RemoveLastElement();  
  125.                         bw.Write(ushort.MaxValue);  
  126.                     }  
  127.                     break;  
  128.                 case XmlNodeType.EndElement:  
  129.                     _path.RemoveLastElement();  
  130.                     bw.Write(ushort.MaxValue);  
  131.                     break;  
  132.                 case XmlNodeType.Text:  
  133.                     bw.Write((ushort)0);  
  134.                     bs = Encoding.UTF8.GetBytes(reader.Value);  
  135.                     bw.Write((ushort)bs.Length);  
  136.                     bw.Write(bs);  
  137.                     break;  
  138.                 default:  
  139.                     break;  
  140.             }  
  141.         }  
  142.         bw.Close();  
  143.         ms.Close();  
  144.         reader.Close();  
  145.         return ms.ToArray();  
  146.     }  
  147.  
  148.     public string BytesToXml(byte[] bytes) {  
  149.         MemoryStream ms = new MemoryStream(bytes);  
  150.         BinaryReader br = new BinaryReader(ms);  
  151.         StringBuilder sb = new StringBuilder();  
  152.         StringWriter sw = new StringWriter(sb);  
  153.         XmlWriterSettings settings = new XmlWriterSettings();  
  154.         settings.Indent = true;  
  155.         XmlWriter writer = XmlWriter.Create(sw, settings);  
  156.  
  157.         XmlNodeItem item;  
  158.         while (br.PeekChar() != -1) {  
  159.             ushort readFlag = br.ReadUInt16();  
  160.             int len;  
  161.             byte[] bs;  
  162.             string str;  
  163.             if (_map.TryGetValue(readFlag, out item)) {  
  164.                 if (item.ItemType == ItemType.Element)  
  165.                     writer.WriteStartElement(item.Text);  
  166.                 else if (item.ItemType == ItemType.Attritube) {  
  167.                     len = br.ReadUInt16();  
  168.                     bs = br.ReadBytes(len);  
  169.                     str = Encoding.UTF8.GetString(bs);  
  170.                     writer.WriteAttributeString(item.Text, str);  
  171.                 }  
  172.             }  
  173.             else if (readFlag == 0) {  
  174.                 len = br.ReadUInt16();  
  175.                 bs = br.ReadBytes(len);  
  176.                 str = Encoding.UTF8.GetString(bs);  
  177.                 writer.WriteString(str);  
  178.             }  
  179.             else if (readFlag == ushort.MaxValue) {  
  180.                 writer.WriteEndElement();  
  181.             }  
  182.         }  
  183.         writer.Flush();  
  184.         writer.Close();  
  185.         sw.Close();  
  186.         br.Close();  
  187.         return sb.ToString();  
  188.     }  

【編輯推薦】

  1. Servlet引擎的安裝
  2. 配置Servlet開發環境
  3. 標簽庫中JSP Servlet調用
  4. 學習Java Servlet時遇到的小問題
  5. Servlet在session中共享鏈接
責任編輯:彭凡 來源: JavaEye
相關推薦

2021-09-04 16:12:33

壓縮算法數據

2009-09-14 15:45:28

LINQ刪除XML節點

2009-09-08 16:55:01

Linq實現XML轉換

2009-08-24 17:24:28

C#創建XML文檔

2009-08-18 17:08:50

C#編寫XML文檔

2009-06-22 11:52:00

javascriptxml

2009-09-29 15:52:26

Hibernate X

2023-01-15 17:57:01

2023-10-16 19:05:20

2009-07-28 17:34:28

ASP.NET XML

2009-05-04 10:25:36

XML.NET數據

2011-05-18 16:02:08

XML

2019-04-16 11:02:10

TCPIPLinux

2009-06-22 10:22:57

SQL Server

2020-02-13 17:27:31

CAPPaxos 共識算法

2014-12-17 11:19:09

H.264

2009-04-14 09:24:40

OracleXML導出

2017-03-20 10:14:03

語音識別匹配算法模型

2012-09-28 14:08:20

大型網站架構大型網站算法算法

2011-06-07 17:14:15

關系型數據庫壓縮技術
點贊
收藏

51CTO技術棧公眾號

国产午夜福利精品| 亚洲一卡二卡三卡四卡五卡| 久久久亚洲网站| www.88av| 图片一区二区| 亚洲国产精品自拍| 亚洲国产午夜伦理片大全在线观看网站| 91精品国产综合久| 最新亚洲激情| 久久精品99久久久久久久久 | 不卡av免费观看| 国产亚洲1区2区3区| 97碰碰视频| 国产美女www爽爽爽| 国产综合欧美| 精品国产区一区二区三区在线观看 | 四虎免费在线视频| 国产成人黄色| 亚洲二区中文字幕| 天天做天天干天天操| 成人性生交大片免费观看网站| 中文字幕在线不卡一区| 欧美一区二区三区成人久久片| av资源免费看| 老司机精品视频在线| 激情图片小说一区| 日韩av在线免费观看一区| 91小视频在线播放| 亚洲电影有码| 狠狠色狠狠色综合日日五| 国产亚洲精品久久久久久久| 91se在线| 欧美国产1区2区| 欧美精品一区二区三区四区五区| 午夜精品小视频| 国内久久婷婷综合| 国产乱肥老妇国产一区二| 潘金莲一级淫片aaaaaa播放| 国产欧美91| 久久久亚洲天堂| 男人天堂中文字幕| 黄色av一区| 欧美激情第一页xxx| 无码人妻精品中文字幕| 欧美激情黄色片| 中文字幕亚洲自拍| 免费黄色片网站| 欧美日韩老妇| 在线视频一区二区| 快灬快灬一下爽蜜桃在线观看| 国产成人黄色| 中文字幕欧美国内| 欧美精品日韩三级| 最新版天堂资源在线| 深夜福利一区| 精品国产区一区| www.四虎精品| 欧美变态网站| 亚洲午夜性刺激影院| 小早川怜子久久精品中文字幕| 久久99久久人婷婷精品综合 | 在线国产情侣| 亚洲天堂免费看| 妞干网这里只有精品| 午夜影院免费在线| 午夜久久电影网| 国产免费毛卡片| 最新日韩精品| 欧美日韩在线观看一区二区| 国产免费中文字幕| 一区二区三区亚洲变态调教大结局| 欧美一区二区三区影视| 国产精品久久久久久在线观看| 欧美偷窥清纯综合图区| 亚洲色图第三页| 国产美女高潮视频| 精品成人在线| 日本韩国在线不卡| 一级黄色片网站| 国产精品自拍三区| 久久激五月天综合精品| 美女视频久久黄| 男女视频免费看| 日韩在线播放一区二区| 成人福利视频网| 色婷婷中文字幕| 久久九九99视频| av磁力番号网| 国产资源在线观看入口av| 在线亚洲精品福利网址导航| 欧美成人午夜免费视在线看片| 久久资源中文字幕| 久久久不卡影院| 亚洲一区3d动漫同人无遮挡| 香蕉成人app免费看片| 狠狠干狠狠久久| 手机在线国产视频| 欧美精品国产白浆久久久久| 国产一区二区久久精品| 欧美黄色一级网站| 美女精品网站| 超碰97在线资源| 成人免费在线视频网| 一区二区三区**美女毛片| 激情网站五月天| 亚洲一区二区三区四区电影| 一区二区三区视频观看| 日本三级片在线观看| 蜜桃传媒麻豆第一区在线观看| 国产精品久久久久久久久久直播| 成人综合影院| 综合久久2023| 国产精品色在线观看| 男人添女荫道口女人有什么感觉| 成人黄色在线| 精品网站999www| 久久久久无码国产精品| 免费不卡在线观看| 麻豆av一区| yellow字幕网在线| 欧美成人女星排名| 久草手机视频在线观看| 久久黄色影院| 精品国产乱码久久久久久108| av色综合久久天堂av色综合在| 欧美亚洲日本国产| 波多野结衣办公室33分钟| 国语精品一区| 91久久极品少妇xxxxⅹ软件| 免费av不卡| 欧美性受极品xxxx喷水| 四虎影成人精品a片| 9色国产精品| 国产美女99p| caoporn-草棚在线视频最| 日韩一区二区免费电影| 中文字幕美女视频| 免费成人在线网站| 日韩中文一区二区三区| 三上悠亚激情av一区二区三区| 日韩毛片在线看| 日韩在线观看第一页| 哺乳一区二区三区中文视频 | 黄网站在线免费| 在线免费不卡电影| 亚洲欧美va天堂人熟伦| 久久婷婷麻豆| 欧美黑人xxxxx| 网友自拍亚洲| 国产亚洲欧洲高清| 免费看av在线| 国产精品萝li| 亚洲一区二区三区四区精品 | 国产成人无码a区在线观看视频| 超碰成人在线观看| 性色av一区二区三区| 五月婷婷丁香花| 欧美午夜视频一区二区| 色婷婷在线影院| 日韩高清一区二区| 亚洲精品国产一区| 粉嫩一区二区三区在线观看| 欧美成人精品在线观看| 亚洲国产精品二区| 精品日韩视频在线观看| 波多野吉衣中文字幕| 日韩国产高清影视| 桥本有菜av在线| 91免费精品国偷自产在线在线| 久久久久久久香蕉网| 日韩中文字幕观看| 91国产视频在线观看| 日本精品一区二区| 一本色道久久综合精品婷婷| 国产精品久久久久一区二区三区共| 色91精品久久久久久久久| 国精品一区二区三区| 蜜桃精品久久久久久久免费影院 | 久久精品女人天堂| 亚洲一区二区自拍偷拍| 亚洲乱码一区| 国产不卡av在线| 超鹏97在线| 日韩av在线免费播放| 亚洲一级片免费看| 亚洲国产精品一区二区尤物区| 少妇按摩一区二区三区| 国内精品国产成人| 情侣黄网站免费看| 久久精品久久久| 免费看成人午夜电影| 日韩黄色三级在线观看| 国外成人在线直播| √天堂资源地址在线官网| 精品免费国产二区三区 | 涩涩在线视频| 久久精品久久久久久国产 免费| 欧美 日韩 国产 成人 在线| 欧美亚洲图片小说| 日本熟女一区二区| 亚洲资源网站| 5858s免费视频成人| 国产网站在线看| 国产精品久久毛片a| 成年人在线观看av| 国产福利一区二区三区在线视频| 91淫黄看大片| 日韩香蕉视频| 黄色录像特级片| av亚洲在线观看| 国产亚洲欧美一区二区| 亚洲一区二区三区久久久| 琪琪第一精品导航| 欧美卡一卡二| 久久婷婷国产麻豆91天堂| 国产一级片在线| 亚洲第一精品久久忘忧草社区| 97久久人国产精品婷婷| 欧洲在线/亚洲| 日韩网红少妇无码视频香港| 悠悠色在线精品| www色aa色aawww| 中文字幕av在线一区二区三区| 中文字幕在线永久| 处破女av一区二区| 中文写幕一区二区三区免费观成熟| 蜜桃av一区二区三区电影| 国产精品69页| 亚洲综合99| 男女激情无遮挡| 91久久综合| 国产日本在线播放| 亚洲国产激情| 日本熟妇人妻xxxx| 欧美日韩一区二区高清| 国产经典久久久| 亚洲一级毛片| 国产精品伦理一区二区| 日本一区二区免费视频| 国产成人aaa| 国产麻豆剧传媒精品国产| 国产九九视频一区二区三区| 亚洲无在线观看| 精品一区二区av| 红桃视频 国产| 国产精品一区二区在线观看网站 | 色婷婷成人综合| 午夜毛片在线| 美女精品视频一区| 欧洲黄色一区| 久久免费国产视频| 欧美调教sm| 国产91热爆ts人妖在线| 国产精品亚洲成在人线| 国产日韩欧美在线看| 24小时成人在线视频| 91成人免费在线观看| 91精品国产自产精品男人的天堂| 国产91精品一区二区绿帽| 国产精品jk白丝蜜臀av小说| 国产精品一区二区三区免费| 日韩欧美在线精品| 日本在线观看一区二区三区| 久久综合88| 成年人深夜视频| 亚洲精品社区| 看欧美ab黄色大片视频免费| 狠狠色丁香婷婷综合久久片| av在线天堂网| 99热精品一区二区| 亚洲精品一区二区三区影院忠贞| 综合激情成人伊人| 国产大片aaa| 92久久精品| 中文字幕日韩av| 色呦呦在线免费观看| 欧美亚洲国产成人精品| 激情久久一区二区| 99re在线| 欧美日韩久久精品| 成人国产在线看| 快she精品国产999| 国产精欧美一区二区三区白种人| 国产69精品久久久久毛片| 久久美女免费视频| 亚洲卡通动漫在线| 丁香社区五月天| 日韩欧美专区在线| 国产最新视频在线观看| 欧美精品一区二区免费| 亚洲精品一级二级| julia一区二区中文久久94| 国产欧美日韩精品一区二区免费| 超碰超碰超碰超碰超碰| 日韩精品每日更新| 久久国产劲爆∧v内射| 中文字幕一区av| 久久国产视频精品| 精品久久久久久亚洲综合网| 超碰国产在线| 欧美亚洲国产日韩2020| 三级欧美日韩| 亚洲精品视频一二三| 国产亚洲在线| 初高中福利视频网站| 中文无字幕一区二区三区| 日韩欧美亚洲视频| 日韩一区二区在线看| 国产高清美女一级毛片久久| 久久久久久成人精品| 欧美一级做一级爱a做片性| 蜜桃视频在线观看91| 国产精品第十页| 欧美肥老妇视频| 国产男男gay体育生白袜| 日韩高清a**址| 暖暖在线中文免费日本| 成人在线精品视频| 欧美日韩国产传媒| 日韩激情免费视频| 粉嫩aⅴ一区二区三区四区| 久艹在线观看视频| 欧美三级中文字幕在线观看| 亚州av在线播放| 91黑丝高跟在线| 国产精品色呦| 中国丰满熟妇xxxx性| 国产成人亚洲综合色影视| 91人妻一区二区三区蜜臀| 欧美色区777第一页| 国产在线观看免费网站| 欧洲永久精品大片ww免费漫画| 黄色成人美女网站| 日韩网站在线免费观看| 国产成人综合在线播放| 1024手机在线视频| 日韩美女视频在线| 欧美色图天堂| 成人动漫在线观看视频| 国户精品久久久久久久久久久不卡| 免费高清视频在线观看| 一区二区中文视频| 国产精品一区二区黑人巨大| 亚洲精品电影网| 中国字幕a在线看韩国电影| 精品久久久久久综合日本| 亚洲一区二区三区高清| 亚洲第九十七页| 欧美视频免费在线| 国产小视频免费在线观看| 国产精品678| 色无极亚洲影院| 天天av天天操| 亚洲一区二区三区激情| 无码精品黑人一区二区三区 | 国产经典一区| 伊人久久av导航| youjizz在线视频| 777午夜精品视频在线播放| 久久久久久久久免费视频| 亚洲影院色无极综合| 亚洲午夜精品久久久久久app| 成人无码www在线看免费| 91福利视频网站| 国产最新在线| 国产乱码精品一区二区三区日韩精品| 日韩午夜激情| 国产精品久久免费观看| 日韩一级在线观看| 日韩电影免费看| 亚洲不卡中文字幕| 久久精品国产精品亚洲综合| 久久亚洲国产成人精品性色| 日韩电影视频免费| 中韩乱幕日产无线码一区| 一区二区免费在线观看| 成人在线视频一区二区| 亚洲AV无码成人精品区东京热| 在线性视频日韩欧美| 国产精品日本一区二区三区在线| 妞干网在线观看视频| 欧美激情在线看| 亚洲国产中文字幕在线| 国产成人小视频在线观看| 亚洲精彩视频| 精品人妻一区二区三区香蕉 | 手机看片国产精品| 欧美日韩免费看| 免费av网站在线观看| 精品久久中出| 国内不卡的二区三区中文字幕 | 久久五月天婷婷| 国产在线精品一区二区不卡了| 五月天综合激情网| 久久天天躁狠狠躁夜夜躁2014| 亚洲调教一区| 深夜视频在线观看| 欧美三级日韩在线| 国内外成人激情视频| 免费在线观看精品|