微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不停地监听和传递数据

如何解决不停地监听和传递数据

| 这段代码说明了我的问题:
//Constructor
public ReadFormat(String path,int nic) throws IOException{
     this.path = path;
     this.nic = String.valueOf(nic);        
    ReadTshark();    //Calls listening function
}

//listening stdout and sends to another
public void ReadTshark() throws IOException{
    String cmdTshark = path + \" -S\" + \" -i \"+ nic + \" -R \"+ \"\\\"udp.port == 9000\\\" \" + \"-E header=y -E separator=,-Tfields -e frame.len -e frame.time_delta\";  
    System.out.println(cmdTshark);
    String s=null;
    Process p = Runtime.getRuntime().exec(cmdTshark);
    BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        // read the output from the command
    int i=0;
    while ((s = stdInput.readLine()) != null && b) {
            System.out.println(s);
            rawin[i]=s;
            if(i==100){
                Separate();    //When rawin reaches 100,sends to another function to process    
            }
        }
}

//receives data and sends to another function
private void Separate(){
}
//receives data and sends to another function
private void NextFunction{
}
如何在没有以下情况的情况下将数据函数传递给函数: 停止收听,直到其他情况为止; 继续将数据传递给功能,因此一旦发送数据,功能将能够接收更多信息。 就像一条链子一样,发送并准备立即接收!     

解决方法

        如果要在线程之间移动流数据,则应查看
PipedInputStream
PipedOutputStream
类。您的“ 3”会将其读取的数据写入PipedOutputStream,而您的其他线程将从链接的PipedInputStream读取数据。 当然,我不认为您的其他线程不会直接使用
p.getInputStream()
。     ,        尽管它不能回答您的特定问题,但您是否考虑过使用Java数据包捕获库,而不是尝试捕获派生的TShark的输出? 我发现JNetPCap非常易于使用。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。