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

ProcessBuilder:日常開發中系統命令調用的高效工具

開發 開發工具
不同的操作系統支持的命令和參數可能不同,因此在使用??ProcessBuilder???調用系統命令時,需要考慮跨平臺兼容性。例如??Windows???系統中的??dir???命令在??Linux???系統中對應的是??ls??命令。可以通過判斷當前操作系統類型,執行相應的命令。

前言

在日常開發過程中,調用系統命令是一種常見的需求。無論是執行腳本、操作文件、獲取系統信息,還是與其他程序進行交互,都可能需要通過調用系統命令來實現。而ProcessBuilder作為Java中用于創建進程的工具類,為開發者提供了便捷、靈活的系統命令調用方式。

基礎概念

ProcessBuilderJava SE 5及以上版本中引入的一個類,位于java.lang包下。它主要用于創建操作系統進程,通過它可以啟動一個新的進程,并對該進程進行相關配置和操作。

與傳統的Runtime.getRuntime().exec() 方法相比,ProcessBuilder提供了更豐富、更直觀的API,讓開發者能夠更方便地設置進程的環境變量、工作目錄、輸入輸出流等參數。

核心優勢

(一)靈活的參數配置

ProcessBuilder允許開發者通過方法鏈的方式靈活地配置進程的各種參數。例如,可以輕松設置命令及其參數、工作目錄、環境變量等,無需像使用Runtime.getRuntime().exec()方法那樣處理復雜的參數數組。

(二)便捷的輸入輸出處理

通過ProcessBuilder可以方便地獲取進程的輸入流、輸出流和錯誤流,并且能夠對這些流進行重定向操作。這使得開發者可以更靈活地處理進程的輸入輸出,避免因流處理不當而導致的進程阻塞等問題。

(三)更好的可控性

使用ProcessBuilder能夠更精確地控制進程的啟動和執行。開發者可以等待進程執行完成,獲取進程的退出值,判斷進程的執行結果是否符合預期。同時,還可以通過destroy()方法終止進程,提高了對進程的可控性。

基本使用方法

創建 ProcessBuilder 對象

創建ProcessBuilder對象時,需要指定要執行的命令及其參數。可以通過構造方法傳入一個包含命令和參數的列表或數組。例如,要執行ls -l命令(在Linux系統中),可以這樣創建ProcessBuilder對象:

ProcessBuilder pb = new ProcessBuilder("ls", "-l");

配置進程參數

設置工作目錄:通過directory()方法可以設置進程的工作目錄。例如,將工作目錄設置為/home/user

pb.directory(new File("/home/user"));

設置環境變量:ProcessBuilderenvironment()方法返回一個Map對象,通過該Map可以設置進程的環境變量。例如,添加一個名為PATH的環境變量:

Map<String, String> env = pb.environment();
env.put("PATH", "/usr/local/bin:" + env.get("PATH"));

重定向輸入輸出流:可以通過redirectInput()、redirectOutput()、redirectError()等方法對進程的輸入輸出流進行重定向。例如,將進程的輸出重定向到指定文件:

pb.redirectOutput(new File("output.txt"));

啟動進程并獲取結果

等待進程執行完成Process對象的waitFor()方法會阻塞當前線程,直到進程執行完成。該方法返回一個int類型的值,表示進程的退出狀態,通常0表示進程正常退出。

Process process = pb.start();
int exitCode = process.waitFor();

處理進程的輸入輸出:如果沒有對進程的輸入輸出流進行重定向,就需要通過Process對象的getInputStream()、getOutputStream()getErrorStream ()方法獲取相應的流,并進行處理。需要注意的是,這些流的處理需要在單獨的線程中進行,否則可能會導致進程阻塞。例如,讀取進程的輸出流:

InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

進階技巧

當進程的輸出流數據量較大時,如果不及時讀取,可能會導致緩沖區滿而阻塞進程。因此,需要在單獨的線程中讀取輸出流和錯誤流。可以使用線程池來管理這些線程,提高效率。例如:

Process process = pb.start();

ExecutorService executor = Executors.newFixedThreadPool(2);
executor.submit(() -> {
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
        String line;
        while ((line = reader.readLine()) != null) {
            // 處理輸出內容
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
});

executor.submit(() -> {
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
        String line;
        while ((line = reader.readLine()) != null) {
            // 處理錯誤內容
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
});

int exitCode = process.waitFor();
executor.shutdown();

在某些情況下,進程可能會因為各種原因長時間運行而無法結束,這會影響程序的正常執行。為了避免這種情況,可以為進程設置超時時間,如果超過指定時間進程仍未結束,則強制終止該進程。可以使用Process.waitFor (long timeout, TimeUnit unit)方法來實現,該方法會在指定時間內等待進程結束,如果超時則返回false。例如:

Process process = pb.start();
boolean finished = process.waitFor(5, TimeUnit.SECONDS);
if (!finished) {
    process.destroy();
    // 處理超時情況
}

ProcessBuilder支持通過管道將多個進程連接起來,實現數據的傳遞和處理。例如,在Linux系統中,可以將ls -l命令的輸出通過管道傳遞給grep txt命令,篩選出包含txt的行。使用ProcessBuilder實現如下:

ProcessBuilder pb1 = new ProcessBuilder("ls", "-l");
ProcessBuilder pb2 = new ProcessBuilder("grep", "txt");

Process p1 = pb1.start();
Process p2 = pb2.start();

// 將p1的輸出流連接到p2的輸入流
try (InputStream p1Out = p1.getInputStream();
     OutputStream p2In = p2.getOutputStream()) {
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = p1Out.read(buffer)) != -1) {
        p2In.write(buffer, 0, bytesRead);
    }
}

// 等待p2執行完成并處理結果
p2.waitFor();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(p2.getInputStream()))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
}

工具類

/**
 * ProcessBuilder 工具類,簡化系統命令調用
 */
public class ProcessExecutor {

    // 默認超時時間(毫秒)
    private static final long DEFAULT_TIMEOUT = 30000;
    // 緩沖區大小
    private static final int BUFFER_SIZE = 1024;

    // 命令及參數
    private List<String> command;
    // 工作目錄
    private File workingDir;
    // 環境變量
    private Map<String, String> environment;
    // 超時時間(毫秒)
    private long timeout = DEFAULT_TIMEOUT;


    /**
     * 構造方法,初始化命令
     * @param command 命令及參數(例如:"ls", "-l")
     */
    public ProcessExecutor(String... command) {
        this.command = Arrays.asList(command);
        this.environment = new HashMap<>();
    }


    /**
     * 設置工作目錄
     */
    public ProcessExecutor workingDir(File workingDir) {
        this.workingDir = workingDir;
        return this;
    }


    /**
     * 添加環境變量
     */
    public ProcessExecutor addEnv(String key, String value) {
        this.environment.put(key, value);
        return this;
    }


    /**
     * 設置超時時間(毫秒)
     */
    public ProcessExecutor timeout(long timeout) {
        this.timeout = timeout;
        return this;
    }


    /**
     * 執行命令并返回結果
     * @return 命令執行結果(包含輸出、錯誤信息、退出碼)
     * @throws IOException 輸入輸出異常
     * @throws InterruptedException 線程中斷異常
     * @throws TimeoutException 超時異常
     */
    public Result execute() throws IOException, InterruptedException, TimeoutException {
        // 1. 初始化 ProcessBuilder
        ProcessBuilder pb = new ProcessBuilder(command);

        // 2. 配置工作目錄
        if (workingDir != null) {
            pb.directory(workingDir);
        }

        // 3. 配置環境變量(合并系統環境變量和自定義變量)
        Map<String, String> systemEnv = pb.environment();
        systemEnv.putAll(environment);

        // 4. 啟動進程
        Process process = pb.start();

        // 5. 異步處理輸出流和錯誤流
        ExecutorService executor = Executors.newFixedThreadPool(2);
        StringBuilder output = new StringBuilder();
        StringBuilder error = new StringBuilder();

        // 處理輸出流
        Future<?> outputFuture = executor.submit(() -> readStream(process.getInputStream(), output));
        // 處理錯誤流
        Future<?> errorFuture = executor.submit(() -> readStream(process.getErrorStream(), error));

        // 6. 等待進程執行完成(帶超時)
        boolean finished = process.waitFor(timeout, TimeUnit.MILLISECONDS);
        if (!finished) {
            process.destroyForcibly(); // 強制終止進程
            throw new TimeoutException("命令執行超時(" + timeout + "ms):" + String.join(" ", command));
        }

        // 7. 等待流處理完成
        try {
            outputFuture.get(1, TimeUnit.SECONDS);
            errorFuture.get(1, TimeUnit.SECONDS);
        } catch (ExecutionException e) {
            throw new IOException("流處理失敗", e.getCause());
        } finally {
            executor.shutdown();
        }

        // 8. 返回結果
        return new Result(
                output.toString(),
                error.toString(),
                process.exitValue()
        );
    }


    /**
     * 讀取輸入流并寫入字符串緩沖區
     */
    private void readStream(InputStream inputStream, StringBuilder builder) throws IOException {
        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(inputStream, StandardCharsets.UTF_8)
        )) {
            char[] buffer = new char[BUFFER_SIZE];
            int bytesRead;
            while ((bytesRead = reader.read(buffer)) != -1) {
                builder.append(buffer, 0, bytesRead);
            }
        }
    }


    /**
     * 命令執行結果封裝類
     */
    public static class Result {
        private final String output;      // 命令輸出
        private final String error;       // 錯誤信息
        private final int exitCode;       // 退出碼

        public Result(String output, String error, int exitCode) {
            this.output = output;
            this.error = error;
            this.exitCode = exitCode;
        }

        // 是否執行成功(退出碼為0)
        public boolean isSuccess() {
            return exitCode == 0;
        }

        // getter 方法
        public String getOutput() { return output; }
        public String getError() { return error; }
        public int getExitCode() { return exitCode; }

        @Override
        public String toString() {
            return"Result{" +
                    "output='" + output + '\'' +
                    ", error='" + error + '\'' +
                    ", exitCode=" + exitCode +
                    '}';
        }
    }


    // 示例用法
    public static void main(String[] args) {
        try {
            // 執行 Linux 命令:ls -l /home
            ProcessExecutor executor = new ProcessExecutor("ls", "-l", "/home")
                    .workingDir(new File("/"))  // 設置工作目錄
                    .addEnv("LANG", "en_US.UTF-8")  // 添加環境變量
                    .timeout(10000);  // 設置超時時間

            Result result = executor.execute();

            if (result.isSuccess()) {
                System.out.println("執行成功,輸出:");
                System.out.println(result.getOutput());
            } else {
                System.err.println("執行失敗(" + result.getExitCode() + "),錯誤信息:");
                System.err.println(result.getError());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事項

跨平臺兼容性問題

不同的操作系統支持的命令和參數可能不同,因此在使用ProcessBuilder調用系統命令時,需要考慮跨平臺兼容性。例如Windows系統中的dir命令在Linux系統中對應的是ls命令。可以通過判斷當前操作系統類型,執行相應的命令。

安全問題

調用系統命令可能會帶來安全風險,特別是當命令中包含用戶輸入的內容時,可能會遭受命令注入攻擊。因此,在使用用戶輸入作為命令或參數時,需要進行嚴格的驗證和過濾,避免執行惡意命令。

流處理問題

進程的輸入流、輸出流和錯誤流都需要及時處理,否則可能會導致緩沖區滿而阻塞進程。在處理這些流時,要注意使用正確的方式,避免出現死鎖等問題。建議在單獨的線程中處理輸出流和錯誤流。

資源釋放問題

Process對象代表一個操作系統進程,它會占用系統資源。因此,在進程執行完成后,要及時釋放相關資源,包括關閉流和銷毀進程。可以使用try-with-resources語句來自動關閉流,確保資源的正確釋放。

責任編輯:武曉燕 來源: 一安未來
相關推薦

2023-05-17 08:34:27

開發技術應用

2025-01-15 09:00:20

2017-09-06 12:42:45

AndroidGradle開發技巧

2022-06-26 09:56:50

HttpUtil工具類模式

2024-08-02 17:19:36

2017-01-10 19:06:39

Android日常開發技術經驗

2021-08-03 15:26:56

代碼智能阿里云

2023-08-10 17:23:39

2022-12-19 08:30:51

ViteWebpack

2022-06-08 23:38:49

程序員開發bug

2023-03-26 07:58:04

開發工具開源

2022-07-13 14:40:50

Chrome前端日常開發

2023-08-04 07:22:32

SpringBoot項目

2021-01-04 14:41:28

開發前端工具

2013-12-26 16:55:56

manman命令

2025-03-03 01:00:00

工具加密命令

2009-12-01 19:17:48

PHP開發高效WEB系

2024-12-19 09:05:13

Python鏈式調用

2010-03-08 17:03:22

Python腳本

2011-10-09 14:50:27

MongoDB
點贊
收藏

51CTO技術棧公眾號

bt在线麻豆视频| youjizz亚洲女人| 91美女主播在线视频| 99久久精品免费看国产免费软件| 久久久久久91| 精品中文字幕在线播放 | 欧美国产日韩一区二区三区| 免费日本黄色网址| 四虎地址8848精品| 午夜影院久久久| 亚洲国产日韩综合一区| 欧美一级一区二区三区| 日本成人在线一区| 久久久久亚洲精品国产| 国产三级短视频| 久久aimee| 91精选在线观看| 国产l精品国产亚洲区久久| 麻豆tv在线| 成人aaaa免费全部观看| 国产精品美女在线观看| 希岛爱理中文字幕| 国内黄色精品| 亚洲精品狠狠操| 欧美日韩一区二区免费视频| 2025国产精品视频| 青青操在线视频观看| 羞羞答答一区二区| 欧美变态口味重另类| 精品亚洲一区二区三区四区| 神马久久午夜| 亚洲国产中文字幕| 欧美性受xxxx黑人猛交88| 国产福利第一视频在线播放| 99精品视频在线免费观看| 91久久久久久久| 中文字幕在线视频第一页| 国产精品日韩精品欧美精品| 欧美精品成人在线| 国产1区2区3区4区| 999国产精品永久免费视频app| 日韩精品欧美国产精品忘忧草| jjzz黄色片| 亚洲日本va| 在线不卡一区二区| 天天色综合社区| 国产激情欧美| 欧美亚洲一区三区| 欧美亚洲日本在线观看| 三上悠亚亚洲一区| 色中色一区二区| 三级4级全黄60分钟| 亚洲精品久久久久久| av大片在线播放| 国产日韩欧美精品综合| 欧洲国产精品| 国产精品四虎| 国产精品网友自拍| 色噜噜狠狠一区二区三区| 国产高清免费在线播放| 国产精品天干天干在线综合| 亚洲成人午夜在线| 日本高清视频在线观看| 国产精品国产三级国产普通话三级 | 日本大片免费看| heyzo中文字幕在线| 玉足女爽爽91| 精品视频免费在线播放| 日韩电影毛片| 在线观看91视频| 国内外成人免费在线视频| 亚洲日日夜夜| 精品毛片乱码1区2区3区| 亚洲自拍偷拍精品| 要久久电视剧全集免费| 伊人久久免费视频| 一区二区三区四区五区| 精品动漫3d一区二区三区免费版 | 成人啊v在线| 3751色影院一区二区三区| 日韩高清一二三区| 老司机aⅴ在线精品导航| 亚洲欧美另类在线观看| 正在播放国产对白害羞| 欧美久久影院| 国产91在线视频| av网站免费大全| 91在线视频在线| 一区二区三区欧美在线| 国产美女情趣调教h一区二区| 另类小说一区二区三区| 久久久久久夜精品精品免费| 久久久影院一区二区三区| 成年人视频免费在线观看| 1000精品久久久久久久久| 青青草国产免费| 国产在线|日韩| 精品国产乱码久久久久久夜甘婷婷| 91精品人妻一区二区| 五月久久久综合一区二区小说| 欧美极品欧美精品欧美视频| 怡红院av久久久久久久| 国产高清精品久久久久| 日本午夜精品一区二区| 成人ww免费完整版在线观看| 欧美日韩中文字幕在线| √天堂资源在线| 九九在线精品| 日韩精品影音先锋| 亚洲欧洲成人精品av97| 日韩综合视频在线观看| 久久综合加勒比| 日本中文字幕不卡| 国产精品欧美久久| 在线激情免费视频| 狠狠综合久久av一区二区小说| 高潮一区二区三区| 亚洲传媒在线| 欧美激情一级二级| 国产精品毛片久久久久久久av| 99re亚洲国产精品| 国产91视频一区| 色综合视频一区二区三区日韩| 成人豆花视频| 日韩理论片中文av| 国产成人黄色片| 青草伊人久久| 日韩中文字幕视频在线观看| 国内自拍视频在线播放| 成熟亚洲日本毛茸茸凸凹| 一区二区三区四区在线视频| 亚洲人成午夜免电影费观看| 精品国产免费视频| 5g国产欧美日韩视频| 国产精品果冻传媒| 亚洲国产精品日韩专区av有中文 | 九九视频精品免费| 日产精品一线二线三线芒果| 亚洲人成午夜免电影费观看| 日韩av一区在线| 日本中文字幕免费观看| 懂色av一区二区三区免费观看 | av电影网站在线观看| 免费一级欧美片在线播放| 国产综合精品一区二区三区| av中文字幕在线看| 精品久久国产97色综合| 久久亚洲AV无码| 国产成人av一区二区三区在线观看| 亚洲av综合色区| 免费精品一区| 欧美国产精品va在线观看| 国产av无码专区亚洲av| 亚洲曰韩产成在线| 午夜影院福利社| 亚洲激情偷拍| 久久国产精品一区二区三区四区 | av一区和二区| 成人免费高清观看| 国产婷婷成人久久av免费高清| 日本中文字幕在线| 国产欧美一二三区| 亚洲欧美日韩三级| 亚洲综合婷婷| 国产精品青青草| 91久久国产综合久久91猫猫| 亚洲欧美一区二区三区久久| 国产女优在线播放| 亚洲人成小说网站色在线| 欧美一级大片免费看| 亚洲黄色三级| 日韩亚洲一区在线播放| 国产一区二区自拍视频| 国产欧美一区二区三区米奇| 久久人人爽人人爽人人片av高清| 无码精品人妻一区二区| 色成人在线视频| 女性裸体视频网站| 成人一区二区在线观看| 国产精品无码专区av在线播放| 欧美日韩水蜜桃| 91gao视频| 老司机深夜福利在线观看| 亚洲人永久免费| 97人妻一区二区精品免费视频| 一区二区三区在线播放| 亚洲午夜福利在线观看| 精品一区二区日韩| 欧美图片激情小说| av中文一区| 肥熟一91porny丨九色丨| 日韩精品av| 美日韩在线视频| 日本不卡免费播放| 91麻豆精品国产| 精品人妻一区二区色欲产成人| 欧美国产日韩在线观看| 精品人妻人人做人人爽夜夜爽| 乱码第一页成人| 国产在线无码精品| 欧美日韩激情| 国产欧美一区二区三区另类精品| 日韩成人高清| 97免费在线视频| 国产最新在线| 亚洲欧洲在线视频| 亚洲精品一区二区口爆| 欧美艳星brazzers| 日韩在线视频免费播放| 中文字幕av亚洲精品一部二部| 国产精品久久午夜| 日韩一级片播放| 精品av久久久久电影| 在线观看国产一区| 亚洲人成亚洲精品| av一区二区三区在线观看| 99久久婷婷国产综合精品首页| 欧美激情免费在线| 老司机在线永久免费观看| 欧美va亚洲va| 一区二区三区免费观看视频| 欧美日韩中文字幕在线视频| 麻豆亚洲av成人无码久久精品| 国产欧美一区二区精品性色| 亚洲男人在线天堂| 国产精品夜夜爽| 天堂网在线免费观看| 久久av最新网址| av在线播放亚洲| 欧美日韩国产在线一区| 欧美 另类 交| 99久久久久久中文字幕一区| 日韩久久精品一区二区三区| 久久99偷拍| 国产在线精品一区二区三区》| 视频免费一区二区| 亚洲自拍偷拍区| 欧美中文高清| 亚洲xxxx18| 国产午夜久久av| 成人久久一区二区三区| 永久免费观看精品视频| 国产精品久久久久久久久久久新郎 | 巨大黑人极品videos精品| 日本欧美黄网站| 另类激情视频| 国产99久久精品一区二区 夜夜躁日日躁 | 欧美性高潮在线| 日本在线播放视频| 懂色aⅴ精品一区二区三区蜜月| 亚欧洲精品在线视频| 天天综合色天天综合色h| 国产乡下妇女做爰| 亚洲成国产人片在线观看| 国产精品99无码一区二区| 亚洲国产精品久久一线不卡| 日韩精品视频免费看| 欧美日韩国产精品一区二区不卡中文| 日韩成人免费在线视频| 欧美性生交xxxxx久久久| 人人爽人人爽人人片av| 欧美伊人久久久久久久久影院| 亚洲性在线观看| 91精品国产乱| 国 产 黄 色 大 片| 日韩av综合网站| 九色在线观看| 日韩视频精品在线| 污视频在线看网站| 国内精品400部情侣激情| 亚洲欧美se| 成人高h视频在线| 国产 日韩 欧美 综合 一区| 蜜桃av久久久亚洲精品| 日韩一区三区| 黄色片免费在线观看视频| 精品91久久久久| 国产成人精品无码播放| 日韩电影免费在线看| 国内自拍第二页| 懂色av中文一区二区三区| 国产男女猛烈无遮挡a片漫画| 日本一区二区动态图| 神马久久精品综合| 狠狠做深爱婷婷久久综合一区 | 欧美日韩国产精品一区二区三区| 天天影视涩香欲综合网| 一级成人免费视频| 精品99一区二区| av在线二区| 久久久久久91| 日韩国产大片| 久久66热这里只有精品| 欧美va久久久噜噜噜久久| 美女扒开大腿让男人桶| 欧美aa在线视频| 国产女主播在线播放| 国产蜜臀97一区二区三区| 免费视频网站www| 欧美在线高清视频| 国产自产一区二区| 最近中文字幕日韩精品 | 高清电影在线观看免费| 国产精品久久一| 国产精品色呦| 国产a级片免费看| 久久xxxx精品视频| 污污免费在线观看| 国产精品国模大尺度视频| 中文在线第一页| 精品久久五月天| 色欧美激情视频在线| 欧美在线视频一区| 6080亚洲理论片在线观看| 亚洲高清不卡一区| 免费国产自线拍一欧美视频| 亚洲少妇一区二区| 中文字幕五月欧美| www.亚洲激情| 亚洲精品中文字幕有码专区| 国产偷倩在线播放| 亚洲在线一区二区| 欧美wwwww| 中文字幕亚洲欧洲| 欧美国产成人精品| 草莓视频18免费观看| 日韩精品视频免费| 久操av在线| 97免费资源站| 欧美黄在线观看| 天天干天天操天天做| 国产调教视频一区| 亚洲欧美综合自拍| 亚洲免费影视第一页| 蜜桃视频在线网站| 国产欧美日韩伦理| 亚洲精品影院在线观看| 久草视频福利在线| 亚洲中国最大av网站| www.成人精品| 欧美第一淫aaasss性| 中文在线综合| 国产情侣第一页| 懂色av一区二区三区免费看| 免费一级片视频| 精品国产免费视频| 欧美男男tv网站在线播放| 九九九九精品| 国产农村妇女精品一二区| 欧美熟妇精品黑人巨大一二三区| 亚洲成人第一页| 牛牛澡牛牛爽一区二区| 日本韩国在线不卡| 国产亚洲一区| 免费涩涩18网站入口| 国产精品二区一区二区aⅴ污介绍| 中文字幕观看在线| 久久精品这里热有精品| 国产免费区一区二区三视频免费 | 久久精品国产综合精品| 亚洲欧美日韩专区| 欧美黄色高清视频| 欧美高清www午色夜在线视频| 成人黄色在线电影| 国产精品一区二区三区四区五区| 99精品视频网| 成人无码av片在线观看| 欧美日韩不卡一区| 主播国产精品| 久久久久久欧美精品色一二三四| 亚洲一区日本| 久久精品在线观看视频| 日韩三级av在线播放| 精品三级久久| 亚洲看片网站| 国产成人精品免费一区二区| 国产成人一区二区三区影院在线| 亚洲女同性videos| 祥仔av免费一区二区三区四区| 日本黄色片一级片| 久久亚洲一区二区三区明星换脸| 亚洲视频在线免费播放| 免费91在线视频| 神马日本精品| 91高清国产视频| 天天影视网天天综合色在线播放| a天堂在线资源| 国产精品视频一区二区三区经| 性欧美videos另类喷潮| 人人干在线观看| 亚洲国产精品资源| 欧美综合社区国产| 免费一级特黄特色毛片久久看| 国产无遮挡一区二区三区毛片日本| 国产精品乱码久久久| 欧美在线激情视频| 亚洲一区二区三区| 久久精品无码一区| 精品国产制服丝袜高跟| 日韩中文在线播放|