在应用程序启动时从java清空char设备

时间:2011-11-08 12:45:17

标签: java file-io nonblocking

我的应用程序从char设备读取,该设备从内核空间填充。目前我正在使用一个正常工作的RandomAccessFile访问它。

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

所以,我想“忽略”在我开始申请之前插入的数据。

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

我认为在我开始从中读取数据之前,有一种方法可以“清空”char设备,也许有人可以指出我正确的方向。 我从未使用非阻塞io,比如java.nio。东西,这是要走的路吗?

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

2 个答案:

答案 0 :(得分:1)

好的,我没有找到解决这个问题的好方法。

我找到的唯一解决方案是手动检查System.nanoTime (Scala Code!):

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")

如果有人能提出更好的解决方案,我很感激。

答案 1 :(得分:0)

我假设你已经尝试过RandomAccessFile.setLength(0)(虽然我怀疑它会起作用,但这不是真的如何使用管道)?那么使用FileInputStream并调用skip()直到你不能再跳过它?