我的应用程序从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/