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

求求你了,不要再自己實現這些邏輯了,開源工具類不香嗎?

開發 開發工具
最近公司來了一批實習生,阿粉負責帶一個。這位小師弟說實話,基本功很扎實,做事也非常靠譜,深得阿粉真傳。

 最近公司來了一批實習生,阿粉負責帶一個。這位小師弟說實話,基本功很扎實,做事也非常靠譜,深得阿粉真傳。

[[325347]]

 

不過最近給其 Review 代碼的時候,阿粉發現小師弟有些代碼邏輯有些繁瑣,有些代碼阿粉看來可以用一些開源工具類實現,不需要自己重復實現。

不過這也是正常的,阿粉剛入行的時候寫的代碼也是這樣,這幾年慢慢接觸了一些開源工具類,逐漸積累。現在寫代碼才會直接用工具類替換自己實現的這些繁瑣的邏輯。

于是阿粉給小師弟分享了幾個自己常用的開源工具類,小師弟學完直呼:『666』。

 

 

 

[[325348]]

 

這里阿粉拋磚引玉,分享幾個常用的工具類,希望幫助到剛入行的同學們。其他編程老司機如果還有其他好用的工具類,歡迎評論區分享。

下文主要分享這幾個方向的常用工具類:

 

 

 

 

字符串相關工具類

Java 中 String 應該是日常用的最多一個類吧,平常我們很多代碼需要圍繞 String ,做一些處理。

JDK 提供 String API 雖然比較多,但是功能比較基礎,通常我們需要結合 String 多個方法才能完成一個業務功能。

下面介紹一下 Apache 提供的一個工具類 StringUtils.

Maven Pom 信息如下:

  1. <dependency> 
  2.     <groupId>org.apache.commons</groupId> 
  3.     <artifactId>commons-lang3</artifactId> 
  4.     <version>3.10</version> 
  5. </dependency> 

commons-lang 有兩個版本,一個是 commons-lang3 ,一個是 commons-lang 。

commons-lang 是老版本,已經很久沒有維護了。

commons-lang3 是一直在維護的版本,推薦直接使用這個版本。

注意:如果你系統已經有 commons-lang,注意如果直接替換成 commons-lang3,將會編譯錯誤。commons-lang3 中相關類與 commons-lang 一樣,但是包名不一樣。

判斷字符串是否為空

判斷字符串是否為空,想必每個人應該都寫過吧:

 

  1. if (null == str || str.isEmpty()) { 
  2.  

雖然這段代碼非常簡單,但是說實話,阿粉以前還是在這里犯過空指針的異常的。

 

使用 StringUtils ,上面代碼可以替換下面這樣:

 

  1. if (StringUtils.isEmpty(str)) { 
  2.  

StringUtils 內部還有一個方法 isBlank,也是用來判斷字符串是否為空,兩個方法比較相近,比較搞混,主要區別如下:

 

  1. // 如果字符串都是空格的話, 
  2. StringUtils.isBlank(" ")       = true
  3. StringUtils.isEmpty(" ")       = false;   

判斷字符串是否為空,使用頻率非常高,這里大家可以使用 IDEA Prefix 的功能,輸入直接生成判空語句。

 

 

 

 

字符串固定長度

這個通常用于字符串需要固定長度的場景,比如需要固定長度字符串作為流水號,若流水號長度不足,,左邊補 0 。

這里當然可以使用 String#format 方法,不過阿粉覺得比較麻煩,這里可以這樣使用:

 

  1. // 字符串固定長度 8位,若不足,往左補 0 
  2. StringUtils.leftPad("test", 8, "0"); 

另外還有一個 StringUtils#rightPad,這個方法與上面方法正好相反。

字符串關鍵字替換

StringUtils 提供一些列的方法,可以替換某些關鍵字:

 

  1. // 默認替換所有關鍵字 
  2. StringUtils.replace("aba""a""z")   = "zbz"
  3. // 替換關鍵字,僅替換一次 
  4. StringUtils.replaceOnce("aba""a""z")   = "zba"
  5. // 使用正則表達式替換 
  6. StringUtils.replacePattern("ABCabc123""[^A-Z0-9]+""")   = "ABC123"; 
  7. ....    

字符串拼接

字符串拼接是個常見的需求,簡單辦法使用 StringBuilder 循環遍歷拼接:

 

  1. String[] array = new String[]{"test""1234""5678"}; 
  2. StringBuilder stringBuilder = new StringBuilder(); 
  3.  
  4. for (String s : array) { 
  5.     stringBuilder.append(s).append(";"); 
  6. // 防止最終拼接字符串為空  
  7. if (stringBuilder.length() > 0) { 
  8.     stringBuilder.deleteCharAt(stringBuilder.length() - 1); 
  9. System.out.println(stringBuilder.toString()); 

上面業務代碼不太難,但是需要注意一下上面這段代碼非常容易出錯,容易拋出 StringIndexOutOfBoundsException。

這里我們可以直接使用以下方法獲取拼接之后字符串:

 

  1. StringUtils.join(["a""b""c"], ",")    = "a,b,c" 

StringUtils 只能傳入數組拼接字符串,不過我比較喜歡集合拼接,所以再推薦下 Guava 的 Joiner。

實例代碼如下:

 

  1. String[] array = new String[]{"test""1234""5678"}; 
  2. List<String> list=new ArrayList<>(); 
  3. list.add("test"); 
  4. list.add("1234"); 
  5. list.add("5678"); 
  6. StringUtils.join(array, ","); 
  7.  
  8. // 逗號分隔符,跳過 null 
  9. Joiner joiner=Joiner.on(",").skipNulls(); 
  10. joiner.join(array); 
  11. joiner.join(list); 

字符串拆分

有字符串拼接,就會有拆分字符串的需求,同樣的 StringUtils 也有拆分字符串的方法。

 

  1. StringUtils.split("a..b.c"'.')   = ["a""b""c"
  2. StringUtils.splitByWholeSeparatorPreserveAllTokens("a..b.c"".")= ["a","""b""c"

ps:注意以上兩個方法區別。

StringUtils 拆分之后得到是一個數組,我們可以使用 Guava 的

 

  1. Splitter splitter = Splitter.on(","); 
  2. // 返回是一個 List 集合,結果:[ab, , b, c] 
  3. splitter.splitToList("ab,,b,c"); 
  4. // 忽略空字符串,輸出結果 [ab, b, c] 
  5. splitter.omitEmptyStrings().splitToList("ab,,b,c"

StringUtils 內部還有其他常用的方法,小伙伴可以自行查看其 API。

日期相關工具類

DateUtils/DateFormatUtils

JDK8 之前,Java 只提供一個 Date 類,平常我們需要將 Date 按照一定格式轉化成字符串,我們需要使用 SimpleDateFormat。

 

  1. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
  2. // Date 轉 字符串 
  3. simpleDateFormat.format(new Date()); 
  4. // 字符串 轉 Date 
  5. simpleDateFormat.parse("2020-05-07 22:00:00"); 

代碼雖然簡單,但是這里需要注意 SimpleDateFormat,不是線程安全的,多線程環境一定要注意使用安全。

這里阿粉推薦 commons-lang3 下的時間工具類DateUtils/DateFormatUtils,解決 Date 與字符串轉化問題。

ps:吐槽一下,你們工程中有沒有多個叫 DateUtils 類?阿粉發現我們現有工程,多個模塊有提供這個類,每個實現大同小異。

使用方法非常簡單:

 

  1. // Date 轉化為字符串 
  2. DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"); 
  3. // 字符串 轉 Date 
  4. DateUtils.parseDate("2020-05-07 22:00:00","yyyy-MM-dd HH:mm:ss"); 

除了格式轉化之外,DateUtils 還提供時間計算的相關功能。

 

  1. Date now = new Date(); 
  2. // Date 加 1 天 
  3. Date addDays = DateUtils.addDays(now, 1); 
  4. // Date 加 33 分鐘 
  5. Date addMinutes = DateUtils.addMinutes(now, 33); 
  6. // Date 減去 233 秒 
  7. Date addSeconds = DateUtils.addSeconds(now, -233); 
  8. // 判斷是否 Wie 同一天 
  9. boolean sameDay = DateUtils.isSameDay(addDays, addMinutes); 
  10. // 過濾時分秒,若 now 為 2020-05-07 22:13:00 調用 truncate 方法以后 
  11. // 返回時間為 2020-05-07 00:00:00 
  12. Date truncate = DateUtils.truncate(now, Calendar.DATE); 

JDK8 時間類

JDK8 之后,Java 將日期與時間分為 LocalDate,LocalTime,功能定義更加清晰,當然其也提供一個 LocalDateTime,包含日期與時間。這些類相對于 Date 類優點在于,這些類與 String 類一樣都是不變類型,不但線程安全,而且不能修改。

ps:仔細對比 mysql 時間日期類型 DATE,TIME,DATETIME,有沒有感覺差不多

現在 mybatis 等 ORM 框架已經支持 LocalDate 與 JDBC 時間類型轉化,所以大家可以直接將時間字段實際類型定義為 JDK8 時間類型,然后再進行相關轉化。

如果依然使用的是 Date 類型,如果需要使用新的時間類型,我們需要進行相關轉化。兩者之間進行轉化, 稍微復雜一點,我們需要顯示指定當前時區。

 

  1. Date now = new Date(); 
  2. // Date-----> LocalDateTime 這里指定使用當前系統默認時區 
  3. LocalDateTime localDateTime = now.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); 
  4. // LocalDateTime------> Date 這里指定使用當前系統默認時區 
  5. Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); 

接下來我們使用 LocalDateTime 進行字符串格式化。

 

  1. // 按照 yyyy-MM-dd HH:mm:ss 轉化時間 
  2. LocalDateTime dateTime = LocalDateTime.parse("2020-05-07 22:34:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); 
  3. // 將 LocalDateTime 格式化字符串 
  4. String format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(dateTime); 

另外我們使用 LocalDateTime 獲取當前時間年份,月份特別簡單:

 

  1. LocalDateTime now = LocalDateTime.now(); 
  2. // 年 
  3. int year = now.getYear(); 
  4. // 月 
  5. int month = now.getMonthValue(); 
  6. // 日 
  7. int day = now.getDayOfMonth(); 

最后我們還可以使用 LocalDateTime 進行日期加減,獲取下一天的時間:

 

  1. LocalDateTime now = LocalDateTime.now(); 
  2. // 當前時間加一天 
  3. LocalDateTime plusDays = now.plusDays(1l); 
  4. // 當前時間減一個小時 
  5. LocalDateTime minusHours = now.minusHours(1l); 
  6. // 還有很多其他方法 

總之 JDK8 提供的時間類非常好用,還沒用過小伙伴,可以嘗試下。

集合/數組相關

集合與數組我們日常也需要經常使用,也需要對其進行判空:

 

  1. if (null == list || list.isEmpty()) { 
  2.  

ps: 數組、Map 集合與其類似

上面代碼如字符串判空一樣寫起來都非常簡單,但是也比較容易寫出會拋出空指針異常的代碼。這里我們可以使用 commons-collections 提供工具類。

pom 信息:

  1. <dependency> 
  2.     <groupId>org.apache.commons</groupId> 
  3.     <artifactId>commons-collections4</artifactId> 
  4.     <version>4.4</vesion> 
  5. </dependency> 

ps: 還有一個低版本的 ,artifactId 為 commons-collections

我們可以使用 CollectionUtils/MapUtils進行判空判斷。

 

  1. // List/Set 集合判空 
  2. if(CollectionUtils.isEmpty(list)){ 
  3.  
  4. // Map 等集合進行判空 
  5. if (MapUtils.isEmpty(map)) { 
  6.      

至于數組判空判斷需要使用 commons-lang 下的 ArrayUtils進行判斷:

 

  1. // 數組判空 
  2. if (ArrayUtils.isEmpty(array)) { 
  3.      

除此之外還有一些列的對于集合增強方法,比如快速將數組加入到現有集合中:

 

  1. List<String> listA = new ArrayList<>(); 
  2. listA.add("1"); 
  3. listA.add("2"); 
  4. listA.add("3"); 
  5. String[] arrays = new String[]{"a""b""c"}; 
  6. CollectionUtils.addAll(listA, arrays); 

其他方法感興趣同學可以再自行研究下,另外 Guava 中也有提供對于集合的操作增強類 Lists/Maps,這個可以看下阿粉之前寫的:老司機阿粉帶你玩轉 Guava 集合類

I/O 相關

JDK 有提供一系列的類可以讀取文件等,不過阿粉覺得那些類有些晦澀難懂,實現一個小功能可能還要寫好多代碼,而且還不一定能寫對。

阿粉推薦一下 Apache 提供的 commons-io 庫,增強 I/O 操作,簡化操作難度。pom 信息:

  1. <dependency> 
  2.     <groupId>commons-io</groupId> 
  3.     <artifactId>commons-io</artifactId> 
  4.     <version>2.6</version> 
  5. </dependency> 

FileUtils-文件操作工具類

文件操作工具類提供一系列方法,可以讓我們快速讀取寫入文件。

快速實現文件/文件夾拷貝操作 ,FileUtils.copyDirectory/FileUtils.copyFile

 

  1. // 拷貝文件 
  2. File fileA = new File("E:\\test\\test.txt"); 
  3. File fileB = new File("E:\\test1\\test.txt"); 
  4. FileUtils.copyFile(fileA,fileB); 

使用 FileUtils.listFiles 獲取指定文件夾上所有文件

 

  1. // 按照指定文件后綴如java,txt等去查找指定文件夾的文件 
  2. File directory = new File("E:\\test"); 
  3. FileUtils.listFiles(directory, new String[]{"txt"}, false); 

使用 FileUtils.readLines 讀取該文件所有行。

 

  1. // 讀取指定文件所有行 不需要使用 while 循環讀取流了 
  2. List<String> lines = FileUtils.readLines(fileA) 

有讀就存在寫,可以使用 FileUtils.writeLines,直接將集合中數據,一行行寫入文本。

 

  1. // 可以一行行寫入文本 
  2. List<String> lines = new ArrayList<>(); 
  3. ..... 
  4. FileUtils.writeLines(lines) 

IOUtils-I/O 操作相關工具類

FileUtils 主要針對相關文件操作,IOUtils 更加針對底層 I/O,可以快速讀取 InputStream。實際上 FileUtils 底層操作依賴就是 IOUtils。

IOUtils可以適用于一個比較試用的場景,比如支付場景下,HTTP 異步通知場景。如果我們使用 JDK 原生方法寫:

從 Servlet 獲取異步通知內容

 

  1. byte[] b = null
  2. ByteArrayOutputStream baos = null
  3. String respMsg = null
  4. try { 
  5.     byte[] buffer = new byte[1024]; 
  6.     baos = new ByteArrayOutputStream(); 
  7.    // 獲取輸入流 
  8.     InputStream in = request.getInputStream(); 
  9.     for (int len = 0; (len = in.read(buffer)) > 0; ) { 
  10.         baos.write(buffer, 0, len); 
  11.     } 
  12.     b = baos.toByteArray(); 
  13.     baos.close(); 
  14.    // 字節數組轉化成字符串 
  15.     String reqMessage = new String(b, "utf-8"); 
  16. } catch (IOException e) { 
  17.    
  18. } finally { 
  19.     if (baos != null) { 
  20.         try { 
  21.             baos.close(); 
  22.         } catch (IOException e) { 
  23.             
  24.         } 
  25.     } 

上面代碼說起來還是挺復雜的。不過我們使用 IOUtils,一個方法就可以簡單搞定:

 

  1. // 將輸入流信息全部輸出到字節數組中 
  2. byte[] b = IOUtils.toByteArray(request.getInputStream()); 
  3. // 將輸入流信息轉化為字符串 
  4. String resMsg = IOUtils.toString(request.getInputStream()); 

ps: InputStream 不能被重復讀取

計時

編程中有時需要統計代碼的的執行耗時,當然執行代碼非常簡單,結束時間與開始時間相減即可。

 

  1. long start = System.currentTimeMillis();   //獲取開始時間 
  2.  
  3. //其他代碼 
  4. //... 
  5. long end = System.currentTimeMillis(); //獲取結束時間 
  6.  
  7. System.out.println("程序運行時間: " + (end - start) + "ms"); 

雖然代碼很簡單,但是非常不靈活,默認情況我們只能獲取 ms 單位,如果需要轉換為秒,分鐘,就需要另外再計算。

這里我們介紹 Guava Stopwatch 計時工具類,借助他統計程序執行時間,使用方式非常靈活。

commons-lang3 與 Spring-core 也有這個工具類,使用方式大同小異,大家根據情況選擇。

 

  1. // 創建之后立刻計時,若想主動開始計時 
  2. Stopwatch stopwatch = Stopwatch.createStarted(); 
  3. // 創建計時器,但是需要主動調用 start 方法開始計時 
  4. // Stopwatch stopwatch = Stopwatch.createUnstarted(); 
  5. // stopWatch.start(); 
  6. // 模擬其他代碼耗時 
  7. TimeUnit.SECONDS.sleep(2l); 
  8.  
  9. // 當前已經消耗的時間 
  10. System.out.println(stopwatch.elapsed(TimeUnit.SECONDS));; 
  11.  
  12. TimeUnit.SECONDS.sleep(2l); 
  13.  
  14. // 停止計時 未開始的計時器調用 stop 將會拋錯 IllegalStateException 
  15. stopwatch.stop(); 
  16. // 再次統計總耗時 
  17. System.out.println(stopwatch.elapsed(TimeUnit.SECONDS));; 
  18. // 重新開始,將會在原來時間基礎計算,若想重新從 0開始計算,需要調用 stopwatch.reset() 
  19. stopwatch.start(); 
  20. TimeUnit.SECONDS.sleep(2l); 
  21. System.out.println(stopwatch.elapsed(TimeUnit.SECONDS)); 

輸出結果為:

 

總結

今天阿粉拋磚引玉,介紹了字符串、日期、數組/集合、I/O、計時等工具類,簡化日常業務代碼。大家看完可以嘗試一下,不得不說,這些工具類真香!

責任編輯:華軒 來源: Java極客技術
相關推薦

2020-10-12 10:45:44

nullava程序員

2021-05-11 07:10:18

標準庫DjangoOS

2020-12-11 09:24:19

Elasticsear存儲數據

2024-02-01 08:21:40

2020-12-15 08:06:45

waitnotifyCondition

2020-06-15 08:12:51

try catch代碼處理器

2019-11-18 10:05:43

程序員技能開發者

2019-11-18 10:16:37

工程師開發網絡

2021-12-05 23:17:18

iOS蘋果系統

2025-02-10 08:05:03

2022-10-27 21:34:28

數據庫機器學習架構

2020-09-22 09:05:45

MySQLUTF-8utf8mb4

2020-11-09 08:22:29

程序員 IT科技

2025-08-18 09:35:02

2020-01-21 21:15:16

WiFi網絡WiFi6

2025-06-25 09:31:41

2021-12-02 06:34:34

GraylogELK日志

2021-12-03 10:46:49

ELKGraylog運維

2020-12-01 11:18:34

對外接口枚舉

2021-09-30 06:13:36

打印日志error
點贊
收藏

51CTO技術棧公眾號

国产一区一区三区| 91久久在线观看| av黄色在线免费观看| 欧美日韩免费电影| 亚洲国产一区二区视频| 欧美日韩喷水| aa视频在线免费观看| 国产一区二区高清| 色婷婷综合久久久久中文字幕1| 国产黑丝在线视频| 韩国成人漫画| 一区二区在线观看视频在线观看| 蜜桃成人在线| 国产xxxx在线观看| 日韩电影网1区2区| 久久久久久国产| 久久一级免费视频| 秋霞蜜臀av久久电影网免费| 69堂国产成人免费视频| av免费观看网| 91精品久久| 国产免费观看久久| 黄色91av| www.色日本| 麻豆成人av在线| 2019中文字幕在线观看| 欧美三级在线免费观看| 成人直播大秀| 亚洲欧美激情另类校园| 国产人妻精品午夜福利免费| 色成人综合网| 91黄色免费版| 国产又黄又大又粗视频| 日本成人不卡| 自拍偷在线精品自拍偷无码专区| 日本精品一区二区| 亚洲av成人精品日韩在线播放| 国产最新精品精品你懂的| 国产成人精品免高潮费视频| 日韩av在线电影| 欧美女人交a| 久久精品视频免费播放| 人人爽人人爽人人片| 无码少妇一区二区三区| 亚洲国产欧美在线成人app| 97超碰人人看| 欧美高清hd| 日韩一区二区在线观看视频播放| 国产福利在线免费| 欧美电影在线观看网站| 欧美午夜片在线看| 91精品无人成人www| 国模冰冰炮一区二区| 日韩欧美国产视频| 欧美一级在线看| 草草视频在线观看| 欧美日韩国产一区二区| 日本国产在线播放| 日韩激情电影免费看| 欧美日韩午夜剧场| 久久久久久久久久久久久国产精品| 日本在线影院| 日本丶国产丶欧美色综合| 国产a级片免费观看| 成人日韩精品| 欧美日本乱大交xxxxx| 污污的视频免费| 国产一区二区三区免费观看在线 | 欧美在线观看成人| 在线观看v片| 在线观看成人免费视频| 伊人国产在线视频| 久久av偷拍| 亚洲精品一区二区在线观看| 日批在线观看视频| 国产一区二区电影在线观看| 色婷婷av一区二区三区在线观看| 亚洲欧美卡通动漫| 国产精品啊v在线| 38少妇精品导航| 国产精品51麻豆cm传媒| 国内欧美视频一区二区| 精品国产乱码一区二区三区四区| 视频二区在线| 中文字幕一区在线| 男女激情免费视频| 日韩中文视频| 日韩免费性生活视频播放| 亚洲国产精品无码久久久久高潮| 国产欧美日韩视频在线| 九九热这里只有精品免费看| 久久久久久久久久久久久久av| 日韩av中文在线观看| 亚洲综合自拍一区| 欧美69xxxxx| 亚洲欧美日韩久久| 国产二区视频在线播放| 成人污污www网站免费丝瓜| 亚洲国产成人精品女人久久久 | 在线视频观看一区二区| 国产丝袜一区| 神马久久久久久| 精品久久免费视频| 在线永久看片免费的视频| 亚洲精品69| 亚洲缚视频在线观看| 91激情视频在线观看| 欧美国产专区| 国产精品久久中文| 丰满熟妇乱又伦| 国产精品污www在线观看| 污污污污污污www网站免费| 欧美人与性动交xxⅹxx| 日韩免费视频线观看| 成人在线手机视频| 亚洲精品1区2区| 成人久久久久久久| 欧美日本韩国一区二区| 一区二区三区日韩精品| 中文久久久久久| 日韩欧美影院| 久久久久久美女| 国产精品久久久久毛片| 国产三级一区二区| 国产玉足脚交久久欧美| 国产美女亚洲精品7777| 在线免费看av不卡| youjizz在线视频| 99视频一区二区| 妞干网在线播放| 国产一区二区av在线| 深夜成人在线观看| 中国黄色一级视频| 国产亚洲成av人在线观看导航| 丁香花在线影院观看在线播放| 国产精久久一区二区| 色偷偷av一区二区三区| 国产精品传媒在线观看| 91麻豆精品秘密| 怡红院av亚洲一区二区三区h| 香蕉成人app| 另类图片亚洲另类| 国产剧情久久久| 亚洲欧美日本在线| 亚洲国产欧美91| 婷婷综合网站| 亚洲在线www| 黄黄的网站在线观看| 91精选在线观看| 强制高潮抽搐sm调教高h| 秋霞电影网一区二区| 欧美性色黄大片人与善| 美女日韩欧美| 国产亚洲视频在线| 在线观看国产小视频| 国产欧美一区二区三区鸳鸯浴| av网站在线观看不卡| 欧美顶级毛片在线播放| 57pao国产精品一区| 日本毛片在线观看| 福利视频第一区| 野外性满足hd| 午夜性色一区二区三区免费视频| 川上优av一区二区线观看| 菠萝菠萝蜜在线视频免费观看| 91麻豆精品91久久久久同性| 久艹视频在线观看| 成人爽a毛片一区二区免费| 久久久久久www| 全球av集中精品导航福利| 日本伊人精品一区二区三区介绍| 国产精品一区二区三区四区色 | 黄色大全在线观看| 国产精品久久久久久户外露出 | 午夜精品久久久久久久爽 | 最近中文字幕免费观看| 国产精品国产馆在线真实露脸| 亚洲在线观看网站| 欧美日韩精品| 久久av免费观看| 高清欧美日韩| 欧美久久精品午夜青青大伊人 | 亚洲欧美怡红院| 45www国产精品网站| 免费人成在线观看网站| 欧美日韩亚洲另类| 久久久久久久久久久97| 久久嫩草精品久久久精品一| 天堂一区在线观看| 尤物在线精品| 先锋影音网一区| 盗摄牛牛av影视一区二区| 日韩av色在线| 色婷婷在线播放| 国产亚洲欧洲高清一区| 精品人妻少妇嫩草av无码专区| 色综合天天在线| 欧美精品乱码视频一二专区| 久久亚洲综合av| ass极品水嫩小美女ass| 麻豆久久精品| 国产小视频免费| 成人嫩草影院| 国产一区免费视频| 爱情电影网av一区二区| 热99在线视频| 男女视频在线| 精品国内产的精品视频在线观看| 性xxxx搡xxxxx搡欧美| 欧美欧美欧美欧美首页| 国产香蕉视频在线| 亚洲免费在线观看视频| 亚洲第一香蕉网| 成人免费视频免费观看| 国产原创精品在线| 亚洲在线观看| www.在线观看av| 99久久99久久精品国产片桃花| 蜜桃导航-精品导航| 精品国产乱码一区二区三区| 国产精品久久久久久久久久新婚 | 国产福利在线视频| 欧美精品一区二区在线播放 | 91精品论坛| 欧美激情第三页| 欧美成人高清在线| 国产亚洲精品美女久久久| 手机看片一区二区| 欧美成人video| 国产av无码专区亚洲av| 欧美亚洲免费在线一区| 五月天婷婷久久| 亚洲午夜久久久久久久久久久 | 国产黄色在线播放| 日韩av网站大全| 日本美女一级视频| 日韩精品在线一区二区| 99久久精品国产一区色 | 国产高潮流白浆喷水视频| 欧美日韩综合在线免费观看| 天天干,天天干| 欧美视频13p| 亚洲欧美精品一区二区三区| 午夜天堂影视香蕉久久| 久久久久久久久久久久国产| 亚洲精品乱码久久久久久| 国产成人自拍网站| 亚洲同性同志一二三专区| 国产麻豆a毛片| 国产精品护士白丝一区av| 亚洲高潮女人毛茸茸| 91蜜桃传媒精品久久久一区二区| 在线天堂www在线国语对白| av午夜一区麻豆| 成人性生活免费看| 欧美人体一区二区三区| 亚洲va欧美va人人爽| 五月天婷婷网站| 天天射综合影视| 91精品国产综合久久久蜜臀九色| 欧美日韩亚洲网| 波多野结衣家庭主妇| 欧美色视频在线| 国产精品女人久久久| 日韩亚洲欧美综合| 精品国产无码一区二区三区| 欧美mv日韩mv亚洲| 五月婷婷伊人网| 一本色道久久综合亚洲精品小说 | 亚洲精品午夜久久久| 久久久久久国产精品免费播放| 亚洲国产成人av| www.com国产| 欧美日本视频在线| 亚洲精品97久久中文字幕无码| 亚洲国产精品一区二区三区| 日本一二三区在线视频| 最近中文字幕日韩精品| 怡红院av在线| 日本中文字幕不卡免费| 91国产一区| 国语精品中文字幕| 欧美日韩久久精品| 日本一本草久p| 国产手机视频一区二区| 亚洲综合婷婷久久| 成人永久看片免费视频天堂| 国产手机在线观看| 亚洲人成在线观看一区二区| 日韩三级小视频| 欧美日韩一区在线观看| 性欧美18一19性猛交| 亚洲欧美成人在线| 超碰在线caoporen| 日韩美女免费线视频| 中文字幕综合| 女女同性女同一区二区三区91| 亚洲成人二区| 波多野结衣家庭教师视频| 国产一区二区久久| 亚洲一区二区三区蜜桃| 亚洲婷婷综合色高清在线| 日韩免费在线视频观看| 欧美日韩在线播放三区| 四虎在线免费看| 久久99久久99精品免观看粉嫩| 日韩三区免费| 国产欧美一区二区视频| 亚洲草久电影| 亚洲色图38p| youjizz久久| 青青草原免费观看| 欧美主播一区二区三区| 色婷婷在线视频| 欧美另类在线观看| 日本久久二区| 日韩在线三级| 香蕉成人久久| 制服丝袜av在线| 亚洲精品高清在线| 在线观看毛片网站| 亚洲人成在线电影| 欧美a级在线观看| 国产精品免费看一区二区三区| 亚洲成av人片乱码色午夜| 日日噜噜夜夜狠狠| 91蝌蚪porny| 国产精品视频26uuu| 在线天堂资源www在线污| 粉嫩精品一区二区三区在线观看| 97在线精品| 激情黄色小视频| 国产精品久久久久久久久动漫| 午夜视频网站在线观看| 亚洲欧美综合精品久久成人| 欧美男男tv网站在线播放| 国产女主播一区二区| 国产综合亚洲精品一区二| 在线a免费观看| 有码一区二区三区| 国产极品久久久| 久久99国产精品自在自在app | 日韩午夜激情电影| 国产丝袜在线| 91在线观看免费| 亚洲国产一成人久久精品| 老司机午夜性大片| 中文字幕一区二区三区乱码在线| 亚洲天堂avav| 精品国产一区二区三区久久| 欧洲亚洲精品久久久久| 亚洲最大免费| 国产在线精品一区二区三区不卡 | 你懂的网址国产 欧美| 国产在线观看中文字幕| 亚洲欧美日韩成人高清在线一区| 国产成人毛毛毛片| 久久久免费精品视频| 久久香蕉网站| 成年人视频在线免费| 国产女人18毛片水真多成人如厕 | 中文字幕久久熟女蜜桃| 日韩中文字幕在线免费观看| 成人污污视频| 东北少妇不带套对白| 久久久精品黄色| 亚洲天堂手机版| 欧美夫妻性视频| 伊人久久大香线蕉| 亚洲欧美日韩一级| 亚洲美女视频一区| 色一情一乱一区二区三区| 国产精彩精品视频| 91精品99| aaaaaav| 欧美日韩国产中文| 青春草视频在线| 欧美另类一区| 精品一二三四区| 日韩经典在线观看| 国产亚洲欧洲黄色| 伊人久久大香线蕉av超碰| 欧美性久久久久| 亚洲欧美色一区| 欧美男男同志| 91在线观看免费观看| 亚洲一区区二区| 国产第一页浮力| 精品亚洲男同gayvideo网站| 欧美日韩视频免费看| 成人免费播放器| 国产精品久久毛片av大全日韩| 午夜精品久久久久久久91蜜桃| 欧美综合在线第二页| 91精品国产自产在线观看永久∴| 国产又粗又长又爽| 欧美日本精品一区二区三区| 综合久久2023| 99er在线视频| 国产精品久久777777|