精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

av免费在线网站| 中文字幕一区二区人妻| 日日天天久久| 欧洲在线/亚洲| 可以免费看的黄色网址| 午夜视频www| 久久国产精品99精品国产| 欧美激情一级二级| 国产精品成人无码免费| 在线观看视频一区二区三区| 欧美午夜精品在线| 大桥未久一区二区| 青青青草网站免费视频在线观看| 美国毛片一区二区三区| 亚洲**2019国产| 小泽玛利亚一区| 女人丝袜激情亚洲| 日韩欧美激情在线| 538任你躁在线精品免费| 男人天堂亚洲| 国产精品视频观看| 久久久水蜜桃| 亚洲精品一区二区三区新线路| 久久伊人亚洲| 午夜精品在线观看| 欧美日韩在线观看成人| 不卡视频在线| 亚洲片国产一区一级在线观看| 不许穿内裤随时挨c调教h苏绵| 视频一区在线免费看| 午夜久久久久久| av动漫在线播放| 欧美午夜电影一区二区三区| 久久久久久日产精品| 国产免费高清一区| 国产哺乳奶水91在线播放| 蜜臀91精品一区二区三区| 奇米四色中文综合久久| 久久国产免费观看| 国产精品精品| 日韩网站免费观看| 激情高潮到大叫狂喷水| 欧美精品一区二区三区精品| 亚洲男人天堂网站| 人妻体内射精一区二区| 久久视频在线观看| 亚洲电影在线观看| 欧美激情 亚洲| 国产亚洲精品美女久久| 精品国产一区二区三区av性色 | 欧美日韩成人一区二区三区 | 国产女主播自拍| 性欧美video高清bbw| 日韩理论片网站| 国产精品夜夜夜爽张柏芝| 三区四区电影在线观看| 国产精品久线观看视频| 亚洲欧洲精品一区二区| 色综合久久影院| 亚洲色图在线视频| 国产免费xxx| 欧美人与牲禽动交com| 亚洲一区二区三区四区五区黄 | 久久另类ts人妖一区二区| 日韩一卡二卡在线| 99久久综合狠狠综合久久| 久久人人97超碰人人澡爱香蕉| 三级在线观看| 国产欧美精品国产国产专区| 日韩一区国产在线观看| 三区四区电影在线观看| 亚洲综合图片区| 蜜臀精品一区二区| 免费亚洲电影| 欧美妇女性影城| 午夜性福利视频| 天堂俺去俺来也www久久婷婷| 亚洲欧美一区二区三区情侣bbw| jizz18女人高潮| 亚洲五月综合| 91精品国产91久久久久久| 免费视频久久久| 精品一区二区综合| 国产日韩二区| av二区在线| 亚洲一级片在线观看| 超碰网在线观看| 亚洲欧美专区| 日韩av一区在线观看| 欧美福利第一页| 欧美视频四区| 国产精品久久久久久久av电影| 国内老熟妇对白xxxxhd| 久久久美女毛片| 伊人久久大香线蕉午夜av| 国产后进白嫩翘臀在线观看视频| 一本大道久久a久久综合| 亚洲精品免费一区亚洲精品免费精品一区 | 中文字幕一区二区三区不卡在线| 国产精品自拍合集| 精品免费av在线| 日韩欧美高清一区| 国产三级黄色片| 亚洲成人直播| 川上优av一区二区线观看| 天天色综合久久| 日韩美女精品在线| 美女福利视频在线| 日本在线视频一区二区三区| 亚洲欧美制服中文字幕| 久久免费视频播放| 精品一区免费av| 日本不卡一二三区| 成人国产电影在线观看| 欧美欧美午夜aⅴ在线观看| 日韩Av无码精品| 亚洲欧美日韩高清在线| 国产97在线观看| 少妇精品视频一区二区| 亚洲精选在线视频| 鲁一鲁一鲁一鲁一av| 九一成人免费视频| 高清欧美性猛交xxxx| 91在线精品入口| 国产欧美日韩在线视频| 日本免费黄视频| 国产精品天天看天天狠| 欧美精品在线看| 国产一区二区三区成人| 国产视频一区二区三区在线观看| www插插插无码视频网站| 久久免费福利| 久久人人爽亚洲精品天堂| 久草热在线观看| 久久久av毛片精品| 免费欧美一级视频| 欧美日韩一本| 欧洲成人午夜免费大片| 亚洲av成人无码久久精品老人| 一区二区欧美精品| japan高清日本乱xxxxx| 正在播放日韩欧美一页| 91久久在线播放| 黄色网址视频在线观看| 91麻豆精品国产综合久久久久久| 亚洲黄色网址大全| 久久精品国产精品亚洲精品| 亚洲成人午夜在线| 欧美爱爱视频| 久久影视免费观看| 亚洲高清视频在线播放| 一区二区日韩av| 中文字幕精品久久久| 亚洲国产日本| 国产在线观看一区| 在线天堂资源| 国产一区二区三区精品久久久 | 国产精品精品软件男同| 黑人精品欧美一区二区蜜桃| 男人的天堂成人| 日本精品一区二区三区在线观看视频| 美女av一区二区| 日本高清视频www| 欧美性猛交视频| 日本美女xxx| 久久精品二区亚洲w码| 亚洲欧美一二三| 巨人精品**| 国产黑人绿帽在线第一区| a天堂在线资源| 91麻豆精品国产91久久久久| 精品肉丝脚一区二区三区| 99久久精品免费观看| 黑鬼大战白妞高潮喷白浆| 欧美少妇xxxx| http;//www.99re视频| 日本不卡网站| xxx欧美精品| 亚洲第一天堂网| 色综合天天综合网天天狠天天| 美国黄色特级片| 国产99精品视频| 激情六月丁香婷婷| 亚洲精彩视频| 久久久久资源| 在线视频成人| 4p变态网欧美系列| 国产在线二区| 亚洲欧美日韩在线一区| 国产精品久久久久久69| 精品久久久久久久久久| 狂野欧美性猛交| eeuss鲁片一区二区三区在线观看 eeuss影院一区二区三区 | 精品一区二区三区免费| 99re6这里有精品热视频| 盗摄牛牛av影视一区二区| 国产成人精品av| 超级碰碰不卡在线视频| 少妇精69xxtheporn| 人妻无码一区二区三区久久99| 91精品91久久久中77777| 久久久国产精品人人片| 国产精品私人影院| 国产麻豆天美果冻无码视频| 黄色资源网久久资源365| 免费在线观看毛片网站| 国产精品va| 国产精品av免费| 亚洲视频分类| 国产亚洲自拍偷拍| 日韩激情欧美| 国产欧美中文字幕| 日韩免费电影| 2018中文字幕一区二区三区| 日韩三级电影视频| 日韩视频免费中文字幕| 国产黄色在线播放| 日韩极品精品视频免费观看| 性欧美videos另类hd| 欧美色图12p| 国产无套丰满白嫩对白| 亚洲国产美国国产综合一区二区| 99热这里只有精品4| 国产日韩一级二级三级| 国产三级视频网站| 99视频一区二区| 国产成人精品一区二区在线小狼| 狠狠狠色丁香婷婷综合久久五月| 狠狠操精品视频| 亚洲一区区二区| 97成人在线免费视频| 亚洲视频福利| 国产一二三区在线播放| 欧美日韩三级| 影音先锋成人资源网站| 亚洲情侣在线| 黄色a级在线观看| 97精品国产| 自拍偷拍一区二区三区| 久久视频国产| 成人在线观看www| 亚洲一区欧美| 男人天堂新网址| 国内精品久久久久久久影视蜜臀| 欧美少妇一区二区三区| 欧美国产综合| 丰满的少妇愉情hd高清果冻传媒 | 欧美激情免费视频| 欧美性受ⅹ╳╳╳黑人a性爽| 久久成人亚洲精品| 综合久久2o19| 国模极品一区二区三区| 国产直播在线| 日本乱人伦a精品| avav成人| 成人免费视频97| 91成人入口| 久久精品一二三区| 色综合综合色| 亚洲一卡二卡三卡| 综合一区二区三区| 日韩日韩日韩日韩日韩| 国产一级一区二区| 亚洲性生活网站| 九九九久久久精品| 动漫av在线免费观看| 99精品欧美一区| 亚洲а∨天堂久久精品2021| 国产精品久久久久久福利一牛影视 | 97香蕉久久超级碰碰高清版| 国产99在线| 国产精品久久婷婷六月丁香| 精品国产不卡一区二区| 精品欧美国产| 日韩精品四区| 国产高清www| 日本不卡不码高清免费观看| aaaaaaaa毛片| 91日韩精品一区| 小向美奈子av| 天天色图综合网| 中文字幕一区二区三区人妻四季| 宅男在线国产精品| 四虎国产精品永远| 日韩在线观看高清| 天堂а√在线最新版中文在线| 国产精品高清在线观看| 日韩在线观看一区二区三区| 欧美少妇一区| 欧美福利视频| 成人黄色一区二区| 国产91精品入口| 中国女人特级毛片| 亚洲午夜日本在线观看| 中文天堂在线播放| 亚洲精品国产精品久久清纯直播 | 欧美xxxxx视频| 精品无码国产一区二区三区av| 日韩和欧美一区二区| 少妇伦子伦精品无吗| 中文字幕va一区二区三区| 日韩av一二三区| 欧美日本一道本| 深夜福利视频一区| 久久福利视频导航| 精品美女一区| 蜜桃麻豆www久久国产精品| 你懂的亚洲视频| 中文字幕中文在线| 国产网站一区二区三区| 日产欧产va高清| 日韩三级.com| 免费av网站在线看| 国产精品国产三级国产aⅴ9色| 国产精品白丝一区二区三区| 中文字幕乱码一区二区三区| 老司机精品视频网站| 欧美成人三级伦在线观看| 亚洲色图欧美激情| 国产在线一级片| 亚洲欧洲激情在线| 擼擼色在线看观看免费| 懂色av一区二区三区在线播放| 99久久久久国产精品| 手机在线看福利| 久久久久久久免费视频了| 在线观看精品国产| 亚洲第一福利在线观看| 日本aa在线| 99re在线观看视频| 午夜久久一区| 丰满少妇一区二区三区专区| 一区二区中文视频| 国产精品无码在线播放| 色偷偷av一区二区三区乱| 国产第一亚洲| 亚洲高清123| 精品在线你懂的| 777777国产7777777| 制服丝袜亚洲播放| 日本一区二区久久精品| 91精品视频一区二区| 综合一区中文字幕| 激情av综合网| 真实国产乱子伦对白在线| 日韩欧美不卡一区| av影视在线| 麻豆成人在线播放| 视频一区欧美精品| 国产123在线| 欧美日韩免费在线视频| 麻豆免费在线观看| 91久久精品一区二区别 | 日韩 欧美 视频| yourporn久久国产精品| 日本va欧美va国产激情| 亚洲精品中文字| xxxxx.日韩| 中文字幕在线亚洲三区| 国产99久久久精品| 免费在线不卡视频| 国产小视频91| 国产999精品在线观看| 妺妺窝人体色www看人体| 99在线精品免费| 中文字幕在线网站| 欧美大尺度在线观看| 国产一区在线电影| www日韩在线观看| 亚洲视频你懂的| 四虎免费在线观看| 国产精品久久久久久久久免费| 日韩成人影院| 无码人妻一区二区三区免费n鬼沢 久久久无码人妻精品无码 | 国产成+人+综合+亚洲欧美丁香花| 老司机aⅴ在线精品导航| 精品久久久久av| 亚洲欧洲日本在线| 国产成人手机在线| 国产精品久久久久一区二区| 欧美在线黄色| www.色天使| 日韩视频免费观看高清完整版在线观看| 9999在线视频| 亚洲图片欧洲图片日韩av| 大白屁股一区二区视频| 波多野结衣视频观看| 九九热在线精品视频| 精品国产一区二区三区| 中文字幕第66页| 欧美性生交大片免费| 超碰人人在线| 欧美视频小说| 国产精品一卡二卡| 中文天堂在线播放| 51精品在线观看| 欧美1区免费| 国产破处视频在线观看| 亚洲精品美女视频| 中文字幕日韩在线|