我已经实现了自己的类来读取pcap
文件。(二进制文件,即tcpdump、wireshark)
public class PcapReader implements Iterator<PcapPacket> {
private InputStream is;
public PcapReader (File file) throws FileNotFoundException, IOException {
is = this(new DataInputStream(
new BufferedInputStream(
new FileInputStream(file))));
}
@Override
public boolean hasNext () {
try {
return (is.available() > 0);
} catch (IOException e) {
return false;
}
}
//pseudo code!
@Override
public PcapPacket next () {
is.read(header);
is.read(body);
return new PcapPacket(header, body);
}
//more code here
}
然后我像这样使用它:
PcapReader reader = new PcapReader(file);
while (reader.hasNext()) {
PcapPacket pcapPacket = reader.next();
//process packet
}
被测文件有 190 Mb。而且我还使用 JVisualVM 进行分析。
hasNext()
被调用170万次,时间为7.7秒next()
被调用的次数相同,时间为3.6秒
我的主要问题是为什么hasNext()
在绝对值上如此耗时并且还大于两倍next
?