我的应用程序从char设备读取,该设备从内核空间填充。目前我正在使用一个正常工作的RandomAccessFile访问它。
我的问题是,在我启动应用程序之前,数据已经写入char设备。 (每秒至少有1个恒定数据)
所以,我想“忽略”在我开始申请之前插入的数据。
问题是,我不知道,这个char设备当前有多少数据。这就像从管道中读取一样,我尝试了一些Reader类,但访问长度总是非法的非法查找异常。
我认为在我开始从中读取数据之前,有一种方法可以“清空”char设备,也许有人可以指出我正确的方向。 我从未使用非阻塞io,比如java.nio。东西,这是要走的路吗?
不幸的是,如果你没有准备发布代码,如果你需要,请告诉我。
答案 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()直到你不能再跳过它?