我的时间有问题。
我目前正在开发一个Java应用程序,我必须制作一个网络分析器。
为此,我使用JPCAP捕获所有数据包,并将它们写在一个文件中,然后我将把它们放在数据库中。
问题是当我在文件中写入整个对象时,就像这样,
UDPPacket udpPacket = (UDPPacket)packet
wtf.writeToFile("packets.txt",udpPacket +"\n");
一切都很顺利,但当我尝试写这样的时候
String str=""+udpPacket.src_ip+" "+udpPacket.dst_ip+""
+udpPacket.src_port+" "+udpPacket.dst_port+" "+udpPacket.protocol +
" Wi-fi "+udpPacket.dst_ip.getCanonicalHostName()+"\n";
wtf.writeToFile("packets.txt",str +"\n");
在文件中写入的时间更长。
写入文件的功能是这个
public void writeToFile(String name, String str){
try{
PrintWriter writer = new PrintWriter(new FileOutputStream(new File(name),this.restart));
if(!str.equalsIgnoreCase("0")){
writer.append(str);
this.restart=true;
}
else {
this.restart=false;
writer.print("");
}
writer.close();
} catch (IOException e) {
System.out.println(e);
}
}
任何人都可以给我一个打击,最好的方法是什么?
非常感谢
编辑:
7354.120266 ns - 数据包打印
241471.110451 ns - 使用StringBuilder
答案 0 :(得分:0)
保持PrintWriter
打开。不要为要写入文件的每一行打开和关闭它。并且不要冲洗它:退出时关闭它。基本上你应该删除你的writeToFile()
方法,并在必要时直接调用PrintWriter.write()
或其他任何方法。
注意:您正在编写文本,而不是文档。
答案 1 :(得分:0)
我发现了问题
正如@KevinO所说,getCanonicalHostName()就是问题所在。
非常感谢。