将对象写入文件。最好的办法

时间:2017-05-01 21:30:36

标签: java file networking packet-capture jpcap

我的时间有问题。

我目前正在开发一个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

2 个答案:

答案 0 :(得分:0)

保持PrintWriter打开。不要为要写入文件的每一行打开和关闭它。并且不要冲洗它:退出时关闭它。基本上你应该删除你的writeToFile()方法,并在必要时直接调用PrintWriter.write()或其他任何方法。

注意:您正在编写文本,而不是文档。

答案 1 :(得分:0)

我发现了问题

正如@KevinO所说,getCanonicalHostName()就是问题所在。

非常感谢。