BrowseNext
当 browse / browseWithPaging 返回的子节点超过服务端单页限制时, 服务端会返回非空的 ContinuationPoint (续翻凭证). 用 browseNext 继续拿下一页.
前置阅读
- 想拿到 ContinuationPoint 必须用 browseWithPaging, 普通 browse 会丢弃 CP.
- 一行调
browseAll(...)可以让 SDK 自动循环 browseNext, 拿全部 references.
签名
public BrowsePage browseNext(byte[] continuationPoint, boolean release);
| 参数 | 说明 |
|---|---|
continuationPoint | 上一次 browse / browseNext 返回的续翻凭证 |
release | true = 放弃续翻, 服务端释放资源 (不返回 references) |
BrowsePage 字段
| 方法 | 返回 | 说明 |
|---|---|---|
getReferences() | List<Reference> | 当前页的引用列表 |
getContinuationPoint() | byte[] (null 表示无更多页) | 续翻凭证 |
hasMore() | boolean | 是否还有下一页 |
完整翻页例子
import com.darra.opcua.*;
import java.util.ArrayList;
import java.util.List;
BrowsePage page = ua.browseWithPaging("ns=2;s=BigFolder");
List<Reference> allRefs = new ArrayList<>(page.getReferences());
while (page.hasMore()) {
page = ua.browseNext(page.getContinuationPoint(), false);
allRefs.addAll(page.getReferences());
}
System.out.println("Total " + allRefs.size() + " children");
或简单一行 (内部自动 browseNext, 末页自动 release):
List<Reference> all = ua.browseAll("ns=2;s=BigFolder");
主动释放 (节省服务端资源)
服务端为每个 ContinuationPoint 维护状态, 占用资源. 如果中途不想继续翻, 调 release=true 显式释放:
ua.browseNext(page.getContinuationPoint(), true);
否则服务端会在超时后 (典型 5 分钟) 自动 GC.
注意
ContinuationPoint是不透明字节数组, 不要修改 / 解析- 同一个
ContinuationPoint只能用一次 - 服务端
ContinuationPoint数量上限 (通常每 Session ~10-100), 超过后旧 CP 会被踢