如何只读取 GET API 响应的前 N ​​行而不是加载整个响应?

How to just read first N lines of a GET API response instead of loading the entire response?

我们有一个 GET API 并且响应是一个巨大的证书列表。如果我们知道第一个证书的开始和结束标记,我们如何只读取第一个证书?而不是将整个响应加载到内存中?

Sample Response :
--------Start Certificate 1---------
chgdbhbdjnjkvfdlnlkvdknl;vkkdsnvnknv
hvjbdjnjvnjdnvjkndjvnjdnvjndnvdjbdee
hbvhjfbnvjnbjfnvjnfjnvjnfjvjnvfjnvjd
---------End Certificate 1----------
--------Start Certificate 2---------
chgdbhbdjnjkvfdlnlkvdknl;vkkdsnvnknv
hvjbdjnjvnjdnvjkndjvnjdnvjndnvdjbdee
hbvhjfbnvjnbjfnvjnfjnvjnfjvjnvfjnvjd
---------End Certificate 2----------
--------Start Certificate 3---------
chgdbhbdjnjkvfdlnlkvdknl;vkkdsnvnknv
hvjbdjnjvnjdnvjkndjvnjdnvjndnvdjbdee
hbvhjfbnvjnbjfnvjnfjnvjnfjvjnvfjnvjd
---------End Certificate 3----------
--------Start Certificate 4---------
chgdbhbdjnjkvfdlnlkvdknl;vkkdsnvnknv
hvjbdjnjvnjdnvjkndjvnjdnvjndnvdjbdee
hbvhjfbnvjnbjfnvjnfjnvjnfjvjnvfjnvjd
---------End Certificate 4----------

您可以将结果存储在一个文件中,然后从该文件中获取只读的n个文件。在 Java.

中使用 FileReader

使用提供的示例,您可以这样做:

    //getting the input stream as a project resource
    //you should get it from the API response
    InputStream inputStream = Objects.requireNonNull(ClassLoader.getSystemResourceAsStream("response.txt"));
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    final String start = "--------Start Certificate 1---------";
    final String end = "---------End Certificate 1----------";
    String line = reader.readLine();
    //dumping everything before first certificate start
    while (!line.equals(start)) {
      line = reader.readLine();
    }
    StringBuilder firstCertificate = new StringBuilder(line).append(System.lineSeparator());
    line = reader.readLine();
    while (!line.equals(end)) {
      firstCertificate.append(line).append(System.lineSeparator());
      line = reader.readLine();
    }
    firstCertificate.append(line);
    System.out.println(firstCertificate);

如果您或您的团队对此负责 API,最好添加对分页的支持。如果您碰巧需要第二个、第三个证书或之后的其他证书,您仍然必须阅读该证书。服务器发送您将转储的数据没有意义。