我的应用程序从char设备读取,而char设备是从内核空间填充的。目前,我正在使用工作正常的RandomAccessFile对其进行访问。

我的问题是,在启动应用程序之前,数据已经写入了char设备。
(恒定数据至少每秒1个)

因此,我想“忽略”启动应用程序之前插入的数据。

我不知道问题是此char设备中当前有多少数据。就像从管道中读取一样,我尝试了一些Reader类,但是访问长度总是会限制非法查找异常。

我认为有一种方法可以从字面上“清空” char设备,然后再开始从中读取数据,也许有人可以向我指出正确的方向。
我从来没有像java.nio这样使用非阻塞io。东西,这是走的路吗?

不幸的是,如果没有准备发布的代码,如果您需要一些代码,请告诉我。

最佳答案

好的,我发现没有解决该问题的好方法。

我发现的唯一解决方案是手动检查System.nanoTime跳过它
(标量代码!):

var run = true
val test = new Array[Byte](10000); //<- needs to be that big!
var count = 0;
device = new RandomAccessFile("/dev/mydevice", "r")
while (run) {
  val time = System.nanoTime();
  device.read(test)
  count = count +1
  if ((System.nanoTime() - time)>100000000) {
    run = false
  }
}
device.close
println("Skipped ["+count+"] lines")


如果有人可以提出更好的解决方案,我对此表示赞赏。

关于java - 在应用程序启动时从Java清空char设备,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8050558/

10-11 00:42