小编Fel*_*yer的帖子

使用iOS SDK解析SRV记录

我想使用iOS SDK解析DNS SRV记录.

我已经尝试过Apple提供的高级Bonjour API,但它们并不是我需要的.现在我正在使用DNS SD.

void *processQueryForSRVRecord(void *record) {
    DNSServiceRef sdRef;
    int context;
    printf("Setting up query for record: %s\n", record);
    DNSServiceQueryRecord(&sdRef, 0, 0, record, kDNSServiceType_SRV, kDNSServiceClass_IN, callback, &context);

    printf("Processing query for record: %s\n", record);
    DNSServiceProcessResult(sdRef);

    printf("Deallocating query for record: %s\n", record);
    DNSServiceRefDeallocate(sdRef);

    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

只要它只获得正确的SRV记录(例如:_xmpp-server._tcp.gmail.com),就可以正常工作,但是当记录键入错误时,DNSServiceProcessResult(sdRef)会进入无限循环.

有没有办法停止DNSServiceProcessResult或者我必须取消调用它的线程吗?

dns objective-c service-discovery srv dns-sd

6
推荐指数
1
解决办法
2236
查看次数

在使用具有不同成本的谓词调用 allMatch 之前对 Java 流进行排序是否会带来任何好处?

我已经实现了一个 Java 流管道,其中对一些元素进行排序并检查它们是否全部满足谓词。管道看起来像这样:

items.stream()
     .sorted(this::sortByType)
     .allMatch(this::isCompliant);
Run Code Online (Sandbox Code Playgroud)

谓词的验证在成本上有所不同。有些元素只需要检查属性,对于其中一些元素,我也必须从数据库中获取可能的许多元素并评估它们。

因为我需要知道所有这些都是真的,所以知道至少有一个是假的,是等价的。如果我正确理解了 allMatch() 操作的 JavaDoc,那么一旦一个元素为 false,它就应该短路。

因此,为了潜在地提高执行速度,我对元素进行排序,以便首先执行所有非常简单的验证,并且只有当它们全部成功时,我才执行成本更高的验证。

至少我认为是这样的。然而,我的 IDE 告诉我,调用 allMatch() 之前进行排序是多余的,因为它不依赖于排序顺序。

我编写了一些测试,这些测试似乎表明在遍历管道时实际上考虑了排序顺序,但也许我的测试用例太小或者只是碰巧被正确调用。

所以我的问题是: allMatch() 是否考虑预先施加的排序顺序?还是它忽略了它?

java sorting java-stream

6
推荐指数
1
解决办法
199
查看次数

标签 统计

dns ×1

dns-sd ×1

java ×1

java-stream ×1

objective-c ×1

service-discovery ×1

sorting ×1

srv ×1