AddressData

读取速度贼快的地址库,包含省市区及身份证号前缀

  • 地址库大小 54.14746KB

  • 读取耗时 14~25ms (MacBook Pro LQ2 i7-4770HQ)

{北京市={市辖区={东城区=110101, 西城区=110102, 崇文区=110103,...

代码


package com.address;import java.io.BufferedInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedHashMap;/**
* Created by wanjian on 2017/11/15.
*/public class Read {public static void main(String[] args) throws IOException {String file = "area.bin";System.out.println("地址库大小/KB " + new File(file).length() / 1024f);long s = System.currentTimeMillis();InputStream inputStream = new BufferedInputStream(new FileInputStream(file));LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Integer>>> map = read(inputStream);inputStream.close();System.out.println("读取耗时/ms " + (System.currentTimeMillis() - s));System.out.println(map);}private static LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Integer>>> read(InputStream in) throws IOException {BufferedInputStream inputStream = new BufferedInputStream(in);LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Integer>>> provinceSet = new LinkedHashMap<>();byte provinceSetSize = readByte(inputStream);for (int i = 0; i < provinceSetSize; i++) {String provinceName = readString(inputStream);LinkedHashMap<String, LinkedHashMap<String, Integer>> citySet = new LinkedHashMap<>();provinceSet.put(provinceName, citySet);byte citySetSize = readByte(inputStream);for (int j = 0; j < citySetSize; j++) {String cityName = readString(inputStream);LinkedHashMap<String, Integer> areaSet = new LinkedHashMap<>();citySet.put(cityName, areaSet);byte areaSetSize = readByte(inputStream);for (int k = 0; k < areaSetSize; k++) {String areaName = readString(inputStream);int code = read3Byte(inputStream);areaSet.put(areaName, code);}}}return provinceSet;}private static String readString(InputStream inputStream) throws IOException {byte[] str = new byte[readByte(inputStream)];int read = 0;int count;while ((read < str.length)) {count = inputStream.read(str, read, str.length - read);if (count < 0) {throw new EOFException("address file maybe incomplete");}read += count;}return new String(str, "UTF-8");}private static int read3Byte(InputStream inputStream) throws IOException {int h = inputStream.read();if (h < 0) {throw new EOFException("address file maybe incomplete");}int m = inputStream.read();if (m < 0) {throw new EOFException("address file maybe incomplete");}int l = inputStream.read();if (l < 0) {throw new EOFException("address file maybe incomplete");}return h << 16 | m << 8 | l;}private static byte readByte(InputStream inputStream) throws IOException {int v = inputStream.read();if (v < 0) {throw new IOException("address file maybe incomplete");}return (byte) v;}/* 生成地址库文件public static void geneAddressFile(LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, Integer>>> provinceSet) throws IOException {OutputStream outputStream = new BufferedOutputStream(new FileOutputStream("/area.bin"));writeByte((byte) provinceSet.size(), outputStream);for (Map.Entry<String, LinkedHashMap<String, LinkedHashMap<String, Integer>>> province : provinceSet.entrySet()) {String provinceName = province.getKey();writeString(provinceName, outputStream);LinkedHashMap<String, LinkedHashMap<String, Integer>> citySet = province.getValue();writeByte((byte) citySet.size(), outputStream);for (Map.Entry<String, LinkedHashMap<String, Integer>> city : citySet.entrySet()) {String cityName = city.getKey();writeString(cityName, outputStream);LinkedHashMap<String, Integer> areaSet = city.getValue();writeByte((byte) areaSet.size(), outputStream);for (Map.Entry<String, Integer> codeSet : areaSet.entrySet()) {String codeName = codeSet.getKey();writeString(codeName, outputStream);int code = codeSet.getValue();write3Byte(code, outputStream);}}}outputStream.close();}private static void writeString(String s, OutputStream outputStream) throws IOException {byte bytes[] = s.getBytes("UTF-8");writeByte((byte) bytes.length, outputStream);outputStream.write(bytes);}private static void writeByte(byte b, OutputStream outputStream) throws IOException {outputStream.write(b);}private static void write3Byte(int v, OutputStream outputStream) throws IOException {outputStream.write((v >> 16) & 0xFF);outputStream.write((v >> 8) & 0xFF);outputStream.write(v & 0xFF);}*/
}复制代码

源码地址 https://github.com/android-notes/AddressData

读取速度贼快的省市区地址库相关推荐

  1. 苹果手机解压缩软件_奇客派 篇六十一:压缩速度贼快,macOS又有一款好用的解压缩软件_软件应用...

    2020-10-24 19:00:001点赞5收藏0评论 欢迎参加#果粉是怎样炼成的#征稿,围观秋季发布会新品!是什么让苹果生态无法割舍?快来讲讲你的果粉炼成记,AirPods Pro等丰厚奖品等你来 ...

  2. 两行配置解决github官网访问速度慢的问题(速度贼快!)

    文章目录 前言 一.配置步骤 1.1 CMD查看网络连通情况 1.2 获取Github相关网站的ip 二.配置本机host地址 三.Github官网 总结 前言 小伙伴们会不会因为github官网速度 ...

  3. 自从用完 Gradle 后,有点嫌弃 Maven 了!速度贼快!

    相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具.但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服: Maven的配置文件是XML格式的,假如你的 ...

  4. Elasticsearch华为云下载(速度贼快)

    近期公司由于项目业务需要便引入了elasticsearch存储库 ,哎不会啊,IT的一大悲哀(不会就学吧(动不动就学,不是我本身不愿意,只是天冷偶尔头顶有点凉罢了)).然后官网下载,阿西吧,本来网就有 ...

  5. 分享一下阿里云的maven镜像地址(速度贼快的那种)

    方法:去meven文件夹下的conf/settings.xml文件 把<mirrors></mirrors>内的镜像配置注释掉加上下面这段代码即可 <mirror> ...

  6. java开发所需各资源整理免费下载(速度贼快)

    不断更新上传中,有需要的话可以评论或者私信我,每周更新上传 ==============================================分割线===================== ...

  7. 使用vray渲染前做了这些,速度贼快!

    我们都有过这样的经历.当你煞费苦心地把场景整合在一起,把摄像机.灯光和纹理调整到完美状态,看到最终结果的兴奋之情油然而生.但是,当你点击渲染时,有些地方却出了错误问题. 幸运的是,渲染从未像现在这样简 ...

  8. 安装scrapy速度慢解决方法 速度贼快

    使用终端pip安装scrapy龟速 解决方案: 使用清华源下载 清华园链接 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/  win+R打开cmd 输入 ...

  9. MPU6050不讲武德,FIFO溢出始终无法解决,提高或降低读取速度都不得行

    抄了原子哥的驱动代码,放在了c8t6最小系统板上去跑,一切正常,自检原本通过不了,一顿操作后可以通过了,加速度角速度读取也OK,唯独读取FIFO中的数据读不出来具体为mpu_dmp_get_data( ...

最新文章

  1. 淘宝亿级高并发分布式架构演进之路
  2. Cytoscape制作带bar图和pie图节点的网络图
  3. PyQt5基础——3
  4. django手机访问_Django对接支付宝电脑网站、App支付步骤详解!这个框架是真强!...
  5. 垂直居中及容器内图片垂直居中的CSS解决方法
  6. 有道词典Mac版崩溃信息
  7. 专业制造计算机电缆,茶陵DJYP2VP2-22计算机电缆专业制造
  8. HDU3571 N-dimensional Sphere(高斯消元 同模方程)
  9. RDS PG如何安装DTS需要的增量迁移插件?
  10. tomcat设置JSessionID长度问题
  11. 亲密关系-【关键对话】-有哪些决定关系的重要议题?
  12. 关于不同体系结构风格的简单认识
  13. 安装SSL证书可以解决浏览器提示的不安全警告
  14. 统计学:统计基本概念
  15. 他们是我的父母 我能怎么办?
  16. 《绿光森林》惹争议 收视冠军也是挨骂冠军
  17. 普洱茶为什么是357克,普洱茶357克的由来
  18. js添加多marker 高德地图_【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物...
  19. 表达能力和PPT文化
  20. 蚂蚁金服回应,支付宝年度账单“虚高”

热门文章

  1. Android全局对象Application的使用,以及如何在任何地方得到Application全局对象
  2. 图像中某点绕点旋转后的坐标,图像旋转坐标位置
  3. python @classmethod 和 @staticmethod区别,以及类中方法参数cls和self的区别
  4. 关于redis的keys命令的性能问题
  5. suse系统关闭防火墙
  6. 用python实现:找出1到101 之间的质数
  7. 程序中保存状态的方式之Cookies
  8. HDU5730 FFT+CDQ分治
  9. [c++][语言语法]函数模板和模板函数 及参数类型的运行时判断
  10. Flex Accordion 和 TabNavigator组件浏览器跳转问题