2011-11-08 52 views
1

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

我的问题是,在我开始我的应用程序之前,数据已经写入到char设备。 (每秒至少有一个常量数据)

所以,我想“忽略”在我开始我的应用程序之前插入的数据。

问题是,我不能告诉,这个字符设备当前有多少数据。这就像从管道中读取,我尝试了一些Reader类,但访问长度总是会导致非法寻找异常。

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

不幸的是,如果没有准备好发布的代码,如果你需要一些,让我知道。

回答

1

好的,我发现没有美丽的方式来解决这个问题。

我发现被跳过它手动检查System.nanoTime 唯一的解决办法(Scala代码!):

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

如果任何人都可以带来一个更好的解决方案,我对此表示赞赏。

0

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

+0

嗨,不,我没有尝试过。正如我在setLength的文档中读到的,它试图访问长度。无论何时访问长度,我都会收到非法寻求异常。我尝试使用FileInputStream,但遇到了与此非法搜索相同的问题。我检查是否跳过适合我。 – evildead

+0

嗨,既不setLength也不跳过作品。我总是非法查找IOException。 – evildead

相关问题