public static PipeSubscribeHeartbeatResp fromTPipeSubscribeResp(
      final TPipeSubscribeResp heartbeatResp) {
    final PipeSubscribeHeartbeatResp resp = new PipeSubscribeHeartbeatResp();

    if (Objects.nonNull(heartbeatResp.body)) {
      for (final ByteBuffer byteBuffer : heartbeatResp.body) {
        if (Objects.nonNull(byteBuffer) && byteBuffer.hasRemaining()) {
          {
            final int size = ReadWriteIOUtils.readInt(byteBuffer);
            final Map<String, TopicConfig> topics = new HashMap<>();
            for (int i = 0; i < size; i++) {
              final String topicName = ReadWriteIOUtils.readString(byteBuffer);
              final TopicConfig topicConfig = TopicConfig.deserialize(byteBuffer);
              topics.put(topicName, topicConfig);
            }
            resp.topics = topics;
          }
          {
            final int size = ReadWriteIOUtils.readInt(byteBuffer);
            final Map<Integer, TEndPoint> endPoints = new HashMap<>();
            for (int i = 0; i < size; i++) {
              final int nodeId = ReadWriteIOUtils.readInt(byteBuffer);
              final String ip = ReadWriteIOUtils.readString(byteBuffer);
              final int port = ReadWriteIOUtils.readInt(byteBuffer);
              endPoints.put(nodeId, new TEndPoint(ip, port));
            }
            resp.endPoints = endPoints;
          }
          resp.topicNamesToUnsubscribe = ReadWriteIOUtils.readStringList(byteBuffer);
          break;
        }
      }
    }

    resp.status = heartbeatResp.status;
    resp.version = heartbeatResp.version;
    resp.type = heartbeatResp.type;
    resp.body = heartbeatResp.body;

    return resp;
  }
Deserialize `TPipeSubscribeResp` to obtain parameters, called by the subscription client.
iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/subscription/payload/response/PipeSubscribeHeartbeatResp.java