【问题标题】:Java parser time issueJava解析器时间问题
【发布时间】:2015-07-06 05:19:03
【问题描述】:

我正在编写一个 Java 解析器,它从 ASANA 服务器获取 ASANA APP 数据并对其进行解析,然后将其保存到本地数据库以获取自定义报告。我对执行此 Java 实用程序所需的时间有疑问。

我有 Java 解析器的这个子部分。当我运行它时,执行大约需要 10 秒。如果此代码在 10 秒内执行而不是一行,则如下所示:

JSONObject Project_jsonObject = (JSONObject) Project_jsonParser.parse(Project_br);

这一行在总共 10 秒中的 9 秒内执行。我怎样才能减少这个时间。任何减少时间的技术或技巧或替代方法。请帮助我,我正在等待

        static File workDir = new File("C:/cygwin64/bin");
        static Runtime systemShell = Runtime.getRuntime();

        String project_request="curl -u 4cKDgv4O.L8Th7N8l7jADg3HRU44abmT: https://app.asana.com/api/1.0/projects/"+id_Project+"?opt_pretty";
        String project_cmd = project_request;
        project_cmd += " | grep 'OBJECT'"; 
        Process ProjectshellOutput = systemShell.exec(workDir+"/"+project_cmd, null,workDir);
        InputStreamReader Project_isr = new InputStreamReader(ProjectshellOutput.getInputStream()); 
        BufferedReader Project_br = new BufferedReader (Project_isr);

        JSONParser Project_jsonParser = new JSONParser();
        JSONObject Project_jsonObject = (JSONObject) Project_jsonParser.parse(Project_br);

        JSONObject projectdataObject= (JSONObject)Project_jsonObject.get("data");

        Long project_id =  (Long) projectdataObject.get("id");
        System.out.println("project id is: " + project_id);


        String project_created_at_dt = (String) projectdataObject.get("created_at");
        System.out.println("The project created at is: " + project_created_at_dt);

        String project_modified_at_dt = (String) projectdataObject.get("modified_at");
        System.out.println("The project modified at is: " + project_modified_at_dt);

        boolean project_public_status = (boolean) projectdataObject.get("public");
        System.out.println("project public status: " + project_public_status);

        String project_name = (String) projectdataObject.get("name");
        System.out.println("project name is: " + project_name);

        String project_notes = (String) projectdataObject.get("notes");
        System.out.println("project Notes are: " + project_notes);

        boolean project_archived_status = (boolean) projectdataObject.get("archived");
        System.out.println("project archived status: " + project_archived_status);

        JSONObject workspaceObj = (JSONObject) projectdataObject.get("workspace");
        Long workspace_id = (Long) workspaceObj.get("id");
        String workspace_name = (String) workspaceObj.get("name");
        System.out.println("Workspace id " + workspace_id + " with workspace  name " + workspace_name);


        String color = (String) projectdataObject.get("color");
        System.out.println("color : " + color);

        JSONObject teamObj = (JSONObject) projectdataObject.get("team");
        Long team_id = (Long) teamObj.get("id");
        String team_name = (String) teamObj.get("name");
        System.out.println("team id " + team_id + " with team name " + team_name);

【问题讨论】:

  • 如果您遵循以下约定,您的代码将更易于阅读:oracle.com/technetwork/java/codeconventions-135099.html
  • 究竟什么是JSONParser
  • 为什么是opt_pretty?这是一种浪费。另外,你想用 Jackson 而不是 org.json 来处理这些东西
  • @KevinKrumwiede 看起来他正在尝试编写自己的 REST 客户端,而不仅仅是使用 Jersey 和 Jackson 或 Gson。他遇到的延迟很可能与缓慢的网络流量和网络服务有关,与他自己的代码无关。
  • @jwenting 好吧,我假设他实际上是正确的,parse(...) 方法需要这么长时间。也许这是假设太多了。

标签: java json parsing


【解决方案1】:

看起来您正在使用 JSON.simple 库。根据this test 的说法,JSON.simple 在大约 140 秒内解析了一个 190 MB 的文件。这与解析 15 MB 文件需要 9 秒一致。杰克逊更快,但只是勉强。所以我怀疑你能做些什么来显着提高性能。

【讨论】:

  • @abdul_majid_bajwa001 没有理由认为有问题需要解决。
  • 有什么办法可以减少这个时间?
  • @abdul_majid_bajwa001 有一个名为Boon 的解析器声称要快得多。但是您可能会重写整个程序,然后发现它并不适合您的用例。
猜你喜欢
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多