Java第一次读文件慢_Java 关于文件读取速度问题,求助,谢谢啦
展开全部
/**
* 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 关于文件读取速度问题,求助,谢谢啦相关推荐
- java上传ftp数据丢失_Java:将文件上传到FTP问题(数据包丢失) - java
我正在尝试将文件从Java应用程序传输到FTP服务器 该程序可以正常工作,文件已传输,但是当我在FTO文件夹中打开文件时,文件已损坏,我认为在文件传输过程中数据包丢失了.为什么?我该如何解决? 另一个 ...
- java 多种类型文件复制_java多种文件复制方式以及效率比较
1.背景 java复制文件的方式其实有很多种,可以分为 传统的字节流读写复制FileInputStream,FileOutputStream,BufferedInputStream,BufferedO ...
- java io文件操作_java IO 文件操作方法总结
java IO 文件操作方法总结 对于输入输出的理解: 输入输出,以程序为参考点,外部数据进入程序,通过输入流完成.程序将数据给外部设备,通过输出流完成. 文件Io的操作 //获取文件 File fi ...
- java底层 文件操作_JAVA的文件操作【转】
11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...
- java 写入文件流_Java实现文件写入——IO流
输入输出的重要性: 输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据.流是一组有序的数据序列,根据操作的类型,分为输入流和输出流. 程序从输入流读取数据,向输出流写入数据. ...
- java图片上传下载_java实现文件的上传和下载
1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...
- java 写文件 高效_java高效文件流读写操作详解|chu
导语 防止自己以后忘记,记录一些文件流的性能对比. 平常经常会操作到文件读写,java当中提供了许多操作文件的类,一般来说,文件操作也叫流操作,可以按照以下方式分类:按照功能分类,字节流和字符流. 按 ...
- java实现文件名过滤器接口_Java使用文件过滤器FileFilter、FilenameFilter搜索文件
搜索文件优化,使用文件过滤器来搜索文件 我们可以使用过滤器来实现在某一目录下指定文件格式的搜索 在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器 一.FileFilter ...
- java解压zip包_Java中文件的压缩与解压,每天进步一点点系列
使用java.util.zip包,实现文件的压缩与解压,并提供了下载方法 注意 无论是调用createNewFile()创建文件,还是在创建输出流时由输出流负责创建文件,都必须保证父路径已经存在,否则 ...
- java文件选择器_java中文件选择器JFileChooser的用法
一般的说,大家用JFileChooser有两种用法:打开文件或文件夹.保存文件或文件夹.本文就打开和保存文件来介绍JFileChooser的用法. 头文件的声明: import javax.swing ...
最新文章
- 揭秘又拍云凭啥做到两年估值超10亿?
- 如何在Windows下编译OpenSSL?
- “苹果光环”褪色后,瑞声靠什么坐稳头把交椅?
- php如何连接wsdl,PHP如何调用wsdl
- 情感分析--word2vec
- TCP/IP的分层负载
- mysql 命令查看帮助_Mysql使用命令分级查找帮助
- 如何用DOS命令批量删除文件?(_desktop.ini 或 thumbs.db)
- Android Lint 实践 —— 简介及常见问题分析
- java中的object... args参数
- SQL SERVER 数据类型详解[zt]
- 探索大神科比,30000多次投篮数据,有好玩的发现
- matlab生成的数值为inf,计算值时为Nan / inf
- centos6和centos7的主要区别和版本选择
- mysql基于ssm的自习室座位管理系统 毕业设计源码221118
- 3dsMax---期末设计[CC‘s 游乐园’]
- [LOJ6515]「雅礼集训 2018 Day10」贪玩蓝月
- mysql sus bench_测量性能 (Benchmarking)
- 对房地产交易-租房的思考
- python创建函数内部静态变量
热门文章
- error: C3861: “pcap_open”: 找不到标识符
- python画五角星填充不同颜色_Python绘制分形树(一)
- 飞利浦AC6608空气净化器粉尘传感器维修
- oracle asm 日志,Oracle+RAC+ASM数据库ora-00257日志归档器错误解决方法
- 一件代发系统php网站源码_靠谱礼品代发平台网站一件代发(0.5元)
- python3中的dict循环性能对比
- python 项目中的requirements.txt文件
- 成功解决slave无datanode问题
- pywt.upcoef中take使用详解
- 基于ssm的用户管理系统_基于SSM的高校学生实习管理系统