From bd69a255fd195a4c52563f09a367b56f54373de9 Mon Sep 17 00:00:00 2001 From: lion Date: Tue, 21 Oct 2025 10:28:56 +0800 Subject: [PATCH] return empty string for empty match --- binding/java/ReadMe.md | 10 +++++++++- binding/java/pom.xml | 2 +- .../main/java/org/lionsoul/ip2region/xdb/Searcher.java | 8 ++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/binding/java/ReadMe.md b/binding/java/ReadMe.md index cda493e..efb8e7a 100644 --- a/binding/java/ReadMe.md +++ b/binding/java/ReadMe.md @@ -7,10 +7,18 @@ org.lionsoul ip2region - 3.1.0 + 3.1.1 ``` +### 关于查询结果 +定位信息查询 API 的原型为: +```java +String search(String ipStr) throw Exception; +String search(byte[] ip) throw Exception; +``` +查询出错会抛出异常,如果查询成功会返回字符串的 `region` 信息,如果指定的 ip 查询不到会返回空字符串 `""`,这对于自定义数据或者数据不完整的情况会出现。 + ### 关于 IPv4 和 IPv6 该 xdb 查询客户端实现同时支持对 IPv4 和 IPv6 的查询,使用方式如下: ```java diff --git a/binding/java/pom.xml b/binding/java/pom.xml index dea3fc7..295628b 100644 --- a/binding/java/pom.xml +++ b/binding/java/pom.xml @@ -4,7 +4,7 @@ org.lionsoul ip2region - 3.1.0 + 3.1.1 jar ip2region diff --git a/binding/java/src/main/java/org/lionsoul/ip2region/xdb/Searcher.java b/binding/java/src/main/java/org/lionsoul/ip2region/xdb/Searcher.java index 974da13..68264a8 100644 --- a/binding/java/src/main/java/org/lionsoul/ip2region/xdb/Searcher.java +++ b/binding/java/src/main/java/org/lionsoul/ip2region/xdb/Searcher.java @@ -124,8 +124,8 @@ public class Searcher { final int bytes = ip.length, dBytes = ip.length << 1; final int segIndexSize = version.segmentIndexSize; final byte[] buff = new byte[segIndexSize]; - int dataLen = -1; - long dataPtr = -1, l = 0, h = (ePtr - sPtr) / segIndexSize; + int dataLen = 0; + long dataPtr = 0, l = 0, h = (ePtr - sPtr) / segIndexSize; while (l <= h) { long m = (l + h) >> 1; long p = sPtr + m * segIndexSize; @@ -145,8 +145,8 @@ public class Searcher { // empty match interception // System.out.printf("dataLen: %d, dataPtr: %d\n", dataLen, dataPtr); - if (dataPtr < 0) { - return null; + if (dataLen == 0) { + return ""; } // load and return the region data