java - 读取文件时永远不会在正文错误中引发 EOFException
问题描述
我必须读入一个特定的网络文件并对数据求和。我正在使用用于 Java 的 pcap4j 库,并使用该库的 github 主机中的示例来读取数据包文件。我正在使用无限 for 循环来读取数据,提取每个数据包的协议,然后当到达 EOF 时,抛出一个打破循环的异常,但是我得到一个编译错误,即 EOFException 永远不会在相应的尝试体中抛出陈述。
句柄之前已分配给以下内容: for 循环是我读取文件和数据包的开始。
finalPcapHandle handle;
handle = Pcaps.openOffline("final-name.pcap");
for(;;) {
try {
Packet packet = handle.getNextPacket();
IpV4Packet ipv4 = packet.get(IpV4Packet.class);
IpNumber prot = ipv4.getHeader().getProtocol();
String comp = prot.toString();
if(comp.contains("UDP")) {
udp++; //variable to count
} else if (comp.contains("TCP")) {
tcp++; //variable to count
} else {
all++; //variable to count
}
} catch (EOFException e) {
System.out.println("End of file");
break;
}
}
tot = udp + tcp + all;
System.out.println("TCP: " + tcp);
System.out.println("UDP: " + udp);
System.out.println("All: " + all);
解决方案
这里唯一与 EOF 有任何关系的方法是读取下一个数据包的方法,即getNextPacket
. 从文档中可以看到getNextPacket
行为方式:
public Packet getNextPacket() throws NotOpenException
...
使用数据包工厂从捕获的数据包创建的数据包对象。可能为 null。
这意味着函数不会抛出一个,EOFException
而是可以null
在没有更多数据包的情况下返回。
还有另一种方法 - getNextPacketEx
:
public Packet getNextPacketEx() 抛出 PcapNativeException, EOFException , TimeoutException, NotOpenException
...
EOFException - 如果正在从 pcap 文件中读取数据包并且没有更多数据包可从该文件中读取。
此方法被明确定义为不返回null
,而是EOFException
在文件末尾抛出一个。
推荐阅读
- c - 在 C 中使用 fgets() 函数检测到堆栈粉碎
- java - 在我的 Spring Boot 应用程序中为 Kafka 实施健康检查的更清洁、更有效的方法是什么?
- angular - ag-grid 使用 Angular 从社区升级到企业
- java - 为什么 Maven 会抛出类似“必须是“pom”但是是“jar”的错误?
- reactjs - 安装 Expo-cli
- mysql - ibdata1 中有多少可用空间
- ios - 如何在 React Native 中呈现原生 UIViewController?
- java - 错误:不兼容的类型:
> 无法转换为观察者> - javascript - 尝试映射时,对象作为 React 子项无效
- c# - 我可以将 TaskScheduler.Default 与 Task.Run 一起使用吗