2011-11-08 53 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

相關問題