如何优化BufferedReader的读取?

问题描述 投票:0回答:1

我有一个用 Java 编写的代码,可以显示 PC 上所有已安装的程序。但由于某种原因,在这行之后,程序运行时间比平常长了 25 秒。

sb.append(reader.lines().collect(Collectors.joining("\n")));

代码本身:

class InstalledPrograms {
    public static String getPrograms() {
        StringBuilder sb = new StringBuilder();

        try {
            ProcessBuilder processBuilder = new ProcessBuilder(getCommand().split(" "));
            Process process = processBuilder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            sb.append(reader.lines().collect(Collectors.joining("\n")));
        } catch (Exception e) {
            e.printStackTrace();
        }

        return sb.toString();
    }


    private static String getCommand() {
        String os = System.getProperty("os.name").toLowerCase();

        if (os.contains("window"))
            return "wmic product get name,version";
        if (os.contains("linux"))
            return "dpkg --list";
        return "pkgutil --pkgs"; // for MacOS
    }
}

我尝试使用 ProcessBuilder - 它没有帮助。我尝试使用 toString() 来避免遍历每个元素 - 它也没有帮助。

java optimization
1个回答
0
投票
    public static String getPrograms() {
        StringWriter sw = new StringWriter();

        try {
            ProcessBuilder processBuilder = new ProcessBuilder(getCommand().split(" "));
            Process process = processBuilder.redirectErrorStream(true).start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            reader.transferTo(sw);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return sw.toString();
    }
a2ps安装
适时安装
账户服务安装
acl安装
ACPI安装
acpi-fakekey 安装
...
输出:
zlib1g:amd64 安装
zlib1g:i386 安装
zlib1g-dev:amd64 安装
缩放安装
zsh 安装
zsh-通用安装


真实0m0.228s
用户0m0.286s
系统0m0.086s
© www.soinside.com 2019 - 2024. All rights reserved.