如何只读取 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,最好添加对分页的支持。如果您碰巧需要第二个、第三个证书或之后的其他证书,您仍然必须阅读该证书。服务器发送您将转储的数据没有意义。
我们有一个 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,最好添加对分页的支持。如果您碰巧需要第二个、第三个证书或之后的其他证书,您仍然必须阅读该证书。服务器发送您将转储的数据没有意义。