auto close the handle after buffer loaded

This commit is contained in:
Lion 2022-07-20 16:15:42 +08:00
parent c15be8c7b5
commit 680624db65
3 changed files with 24 additions and 9 deletions

View File

@ -7,7 +7,7 @@
<dependency> <dependency>
<groupId>org.lionsoul</groupId> <groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId> <artifactId>ip2region</artifactId>
<version>2.6.4</version> <version>2.6.5</version>
</dependency> </dependency>
``` ```
@ -41,7 +41,10 @@ public class SearcherTest {
System.out.printf("failed to search(%s): %s\n", ip, e); System.out.printf("failed to search(%s): %s\n", ip, e);
} }
// 3、备注并发使用每个线程需要创建一个独立的 searcher 对象单独使用。 // 3、关闭资源
searcher.close();
// 备注:并发使用,每个线程需要创建一个独立的 searcher 对象单独使用。
} }
} }
``` ```
@ -87,6 +90,9 @@ public class SearcherTest {
System.out.printf("failed to search(%s): %s\n", ip, e); System.out.printf("failed to search(%s): %s\n", ip, e);
} }
// 4、关闭资源
searcher.close();
// 备注:每个线程需要单独创建一个独立的 Searcher 对象,但是都共享全局的制度 vIndex 缓存。 // 备注:每个线程需要单独创建一个独立的 Searcher 对象,但是都共享全局的制度 vIndex 缓存。
} }
} }
@ -133,6 +139,9 @@ public class SearcherTest {
System.out.printf("failed to search(%s): %s\n", ip, e); System.out.printf("failed to search(%s): %s\n", ip, e);
} }
// 4、关闭资源 - 该 searcher 对象可以安全用于并发,等整个服务关闭的时候再关闭 searcher
// searcher.close();
// 备注:并发使用,用整个 xdb 数据缓存创建的查询对象可以安全的用于并发,也就是你可以把这个 searcher 对象做成全局对象去跨线程访问。 // 备注:并发使用,用整个 xdb 数据缓存创建的查询对象可以安全的用于并发,也就是你可以把这个 searcher 对象做成全局对象去跨线程访问。
} }
} }

View File

@ -4,7 +4,7 @@
<groupId>org.lionsoul</groupId> <groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId> <artifactId>ip2region</artifactId>
<version>2.6.4</version> <version>2.6.5</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>ip2region</name> <name>ip2region</name>

View File

@ -167,8 +167,10 @@ public class Searcher {
} }
public static Header loadHeaderFromFile(String dbPath) throws IOException { public static Header loadHeaderFromFile(String dbPath) throws IOException {
RandomAccessFile handle = new RandomAccessFile(dbPath, "r"); final RandomAccessFile handle = new RandomAccessFile(dbPath, "r");
return loadHeader(handle); final Header header = loadHeader(handle);
handle.close();
return header;
} }
public static byte[] loadVectorIndex(RandomAccessFile handle) throws IOException { public static byte[] loadVectorIndex(RandomAccessFile handle) throws IOException {
@ -184,8 +186,10 @@ public class Searcher {
} }
public static byte[] loadVectorIndexFromFile(String dbPath) throws IOException { public static byte[] loadVectorIndexFromFile(String dbPath) throws IOException {
RandomAccessFile handle = new RandomAccessFile(dbPath, "r"); final RandomAccessFile handle = new RandomAccessFile(dbPath, "r");
return loadVectorIndex(handle); final byte[] vIndex = loadVectorIndex(handle);
handle.close();
return vIndex;
} }
public static byte[] loadContent(RandomAccessFile handle) throws IOException { public static byte[] loadContent(RandomAccessFile handle) throws IOException {
@ -200,8 +204,10 @@ public class Searcher {
} }
public static byte[] loadContentFromFile(String dbPath) throws IOException { public static byte[] loadContentFromFile(String dbPath) throws IOException {
RandomAccessFile handle = new RandomAccessFile(dbPath, "r"); final RandomAccessFile handle = new RandomAccessFile(dbPath, "r");
return loadContent(handle); final byte[] content = loadContent(handle);
handle.close();
return content;
} }
// --- End cache load util function // --- End cache load util function