此代码说明了我的问题:
//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{
}
如何在没有:
的情况下将数据函数传递给函数就像连锁店一样,立即发送并准备好接收!
答案 0 :(得分:0)
如果要在线程之间移动流数据,则应查看PipedInputStream
和PipedOutputStream
类。你的ReadTshark()
会将它读取的数据写入PipedOutputStream,而你的另一个线程会从链接的PipedInputStream中读取数据。
当然,我认为你的其他主题没有理由不直接使用p.getInputStream()
。
答案 1 :(得分:0)
虽然它没有回答您的具体问题,您是否考虑使用Java数据包捕获库而不是尝试从分叉的TShark捕获输出?
我发现JNetPCap非常容易使用。