跳到主要内容

BrowseNext

browse / browseWithPaging 返回的子节点超过服务端单页限制时, 服务端会返回非空的 ContinuationPoint (续翻凭证). 用 browseNext 继续拿下一页.

前置阅读
  • 想拿到 ContinuationPoint 必须用 browseWithPaging, 普通 browse 会丢弃 CP.
  • 一行调 browseAll(...) 可以让 SDK 自动循环 browseNext, 拿全部 references.

签名

public BrowsePage browseNext(byte[] continuationPoint, boolean release);
参数说明
continuationPoint上一次 browse / browseNext 返回的续翻凭证
releasetrue = 放弃续翻, 服务端释放资源 (不返回 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 会被踢

下一步