如何对两个数据流进行时间对齐

时间:2016-06-13 12:04:58

标签: java stream timestamp inputstream pipes-filters

我希望按时间顺序排列具有重叠时间戳的两个数据流。我有一个基本的管道和过滤器框架,我正在使用两个PipedInputStreams。

这是字节流的格式。我有五对(id,数据点),然后下一帧再次以id 0开始:

DATA ID (int) TIMESTAMP (long)  DATA ID (int)  ...   DATA ID (int)  ...

0             ...               1              ...   2              ...

我想检查两个数据流的时间戳,确定哪个更早,然后读取整个帧。然后我想得到下一个时间戳,将它与之前的新时间戳进行比较,然后继续。

这种对齐是否有最佳实践?

例如,我可以从输入流中提取第一行ID,如下所示:

// Read id
for (int i = 0; i < this.getAmountOfInputPipes(); i++) {                    
    id = readIntFromInput(i);
    idList.add(id);
    bytesread = bytesread + 4;
}

// Read data (timestamp)
for (int i = 0; i < this.getAmountOfInputPipes(); i++) {                    
    data = readLongFromInput(i);
    dataList.add(data);
    bytesread = bytesread + 8;
}

我的想法是: 现在我得到了一个TimeStamps列表。我比较它们,找到最早的那个,然后用最早的timeStamp继续读取和写入该帧的完整剩余部分。然后我读取了该inputStream的第一个id和下一个timeStamp。如果一个流结束,我该怎么办?

我有这样的事情:

catch (EndOfStreamException e) {
    ClosePorts();
    System.out.println(this.getName() + "::Filter exiting...");
    break;

} // catch

甚至是流首先结束的问题?或者我只是等待ArrayList为空?

我有一个模糊的想法,但我在实施它时遇到了一些麻烦。提前感谢您的任何想法。

菲利普

0 个答案:

没有答案