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 关于文件读取速度问题,求助,谢谢啦的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python编写性别比例_Python分
- 下一篇: java遍历集合元素_遍历java集合元