展开全部

/**

* ip条目实体类

*/

public class IpEntry {

String country, province, city, region, local;

long start = 0, end = 0;

public String getCountry() {

return country;

}

public String getProvince() {

return province;

}

public String getCity() {

return city;

}

public String getRegion() {

return region;

}

public String getLocal() {

return local;

}

/**

* 接受字符串初始化属性62616964757a686964616fe59b9ee7ad9431333337376331

* @param text

*/

public IpEntry(String text) {

String fields[] = text.split(",");

start = Long.parseLong(fields[1]);

end = Long.parseLong(fields[3]);

country = fields[5];

province = fields[6];

city = fields[7];

region = fields[8];

local = fields[9];

}

}

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

/**

* ip地址表类

*/

public class IpTable {

List table;

//读取文件写入, 逐行构造IpEntry, 写入list

public IpTable(String fileName) {

BufferedReader rd = null;

String line;

table = new LinkedList();

try {

rd = new BufferedReader(new FileReader(fileName));

while (true) {

line = rd.readLine();

if (null == line)

break;

table.add(new IpEntry(line));

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

//IO资源必须在finally中关闭

rd.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

//匹配第一条

public IpEntry matchFirst(long ip) {

for (IpEntry entry : table) {

if (entry.start <= ip && entry.end >= ip)

return entry;

}

return null;

}

//匹配所有

public IpEntry[] matchAll(long ip) {

List list = new ArrayList();

for (IpEntry entry : table) {

if (entry.start <= ip && entry.end >= ip)

list.add(entry);

}

return list.toArray(new IpEntry[list.size()]);

}

//静态方法

static final String IP_TABLE_FILE_NAME = "E://12.txt";

static IpTable instance = null;

public static IpEntry match(long ip) {

//仅在第一次调用时,初始化静态实例读取文件

if (instance == null)

instance = new IpTable(IP_TABLE_FILE_NAME);

return instance.matchFirst(ip);

}

//你要的方法

public static String getIpCountry(String ip) {

return match(ipToLong(ip)).getCountry();    //你自己的ipToLong方法

}

//模拟测试

public static void main(String[] args) {

String ip[] = {

"192.168.1.1",

//...

"220.10.10.135"

};

for (int i = 0; i

System.out.println(IpTable.getIpCountry(ip[i]));

}

}

}

可能你一下转不过来,根据你代码里给的结构给你写了个完整的示例。

主要就是把文件内容读取后格式化放在内存对象中,让后只要在对象中查找匹配,就不用再去读取文件了。关于性能优化的话,因为每次都是顺序迭代查找,所以用了LinkedList,其他的话暂时也想不出什么可以优化的地方了

Java第一次读文件慢_Java 关于文件读取速度问题,求助,谢谢啦相关推荐

  1. java上传ftp数据丢失_Java:将文件上传到FTP问题(数据包丢失) - java

    我正在尝试将文件从Java应用程序传输到FTP服务器 该程序可以正常工作,文件已传输,但是当我在FTO文件夹中打开文件时,文件已损坏,我认为在文件传输过程中数据包丢失了.为什么?我该如何解决? 另一个 ...

  2. java 多种类型文件复制_java多种文件复制方式以及效率比较

    1.背景 java复制文件的方式其实有很多种,可以分为 传统的字节流读写复制FileInputStream,FileOutputStream,BufferedInputStream,BufferedO ...

  3. java io文件操作_java IO 文件操作方法总结

    java IO 文件操作方法总结 对于输入输出的理解: 输入输出,以程序为参考点,外部数据进入程序,通过输入流完成.程序将数据给外部设备,通过输出流完成. 文件Io的操作 //获取文件 File fi ...

  4. java底层 文件操作_JAVA的文件操作【转】

    11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...

  5. java 写入文件流_Java实现文件写入——IO流

    输入输出的重要性: 输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据.流是一组有序的数据序列,根据操作的类型,分为输入流和输出流. 程序从输入流读取数据,向输出流写入数据. ...

  6. java图片上传下载_java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  7. java 写文件 高效_java高效文件流读写操作详解|chu

    导语 防止自己以后忘记,记录一些文件流的性能对比. 平常经常会操作到文件读写,java当中提供了许多操作文件的类,一般来说,文件操作也叫流操作,可以按照以下方式分类:按照功能分类,字节流和字符流. 按 ...

  8. java实现文件名过滤器接口_Java使用文件过滤器FileFilter、FilenameFilter搜索文件

    搜索文件优化,使用文件过滤器来搜索文件 我们可以使用过滤器来实现在某一目录下指定文件格式的搜索 在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器 一.FileFilter ...

  9. java解压zip包_Java中文件的压缩与解压,每天进步一点点系列

    使用java.util.zip包,实现文件的压缩与解压,并提供了下载方法 注意 无论是调用createNewFile()创建文件,还是在创建输出流时由输出流负责创建文件,都必须保证父路径已经存在,否则 ...

  10. java文件选择器_java中文件选择器JFileChooser的用法

    一般的说,大家用JFileChooser有两种用法:打开文件或文件夹.保存文件或文件夹.本文就打开和保存文件来介绍JFileChooser的用法. 头文件的声明: import javax.swing ...

最新文章

  1. 揭秘又拍云凭啥做到两年估值超10亿?
  2. 如何在Windows下编译OpenSSL?
  3. “苹果光环”褪色后,瑞声靠什么坐稳头把交椅?
  4. php如何连接wsdl,PHP如何调用wsdl
  5. 情感分析--word2vec
  6. TCP/IP的分层负载
  7. mysql 命令查看帮助_Mysql使用命令分级查找帮助
  8. 如何用DOS命令批量删除文件?(_desktop.ini 或 thumbs.db)
  9. Android Lint 实践 —— 简介及常见问题分析
  10. java中的object... args参数
  11. SQL SERVER 数据类型详解[zt]
  12. 探索大神科比,30000多次投篮数据,有好玩的发现
  13. matlab生成的数值为inf,计算值时为Nan / inf
  14. centos6和centos7的主要区别和版本选择
  15. mysql基于ssm的自习室座位管理系统 毕业设计源码221118
  16. 3dsMax---期末设计[CC‘s 游乐园’]
  17. [LOJ6515]「雅礼集训 2018 Day10」贪玩蓝月
  18. mysql sus bench_测量性能 (Benchmarking)
  19. 对房地产交易-租房的思考
  20. python创建函数内部静态变量

热门文章

  1. error: C3861: “pcap_open”: 找不到标识符
  2. python画五角星填充不同颜色_Python绘制分形树(一)
  3. 飞利浦AC6608空气净化器粉尘传感器维修
  4. oracle asm 日志,Oracle+RAC+ASM数据库ora-00257日志归档器错误解决方法
  5. 一件代发系统php网站源码_靠谱礼品代发平台网站一件代发(0.5元)
  6. python3中的dict循环性能对比
  7. python 项目中的requirements.txt文件
  8. 成功解决slave无datanode问题
  9. pywt.upcoef中take使用详解
  10. 基于ssm的用户管理系统_基于SSM的高校学生实习管理系统