2011-10-27 83 views
5

我正在使用propriatery Java庫,將其數據直接保存到java.io.File中,但我需要能夠讀取數據以便直接進行流式傳輸。數據是二進制的,一些媒體文件。從文件讀取數據時,它正在寫入

java.io.File作爲參數傳遞給此庫,但我不知道如何從中獲取流。有沒有一些簡單的方法來做到這一點,除了打開文件也讀取和嘗試同步讀/寫操作!?

因爲我從一個applet使用它,所以我想跳過寫入文件系統部分,在這種情況下需要額外的權限。

+1

如果你能傳遞一個OutputStream相反,這會更容易些。這是一個選擇嗎? – laher

回答

4

如果你的程序的一部分寫入文件,那麼您應該可以使用另一個線程中的普通new FileInputStream(someFile)流來讀取該文件,儘管這取決於操作系統對此類操作的支持。你不需要同步任何東西。現在,您處於輸出流的擺佈之中,程序的寫入部分多長時間調用flush()以便可能會有延遲。

這是我寫的little test program,證明它工作正常。讀取部恰恰是在一個循環中看起來類似:

FileInputStream input = new FileInputStream(file); 
while (!Thread.currentThread().isInterrupted()) { 
    byte[] bytes = new byte[1024]; 
    int readN = input.read(bytes); 
    if (readN > 0) { 
     byte[] sub = ArrayUtils.subarray(bytes, 0, readN); 
     System.out.print("Read: " + Arrays.toString(sub) + "\n"); 
    } 
    Thread.sleep(100); 
} 
+0

謝謝,它真的很容易 – user1015922

+2

取決於操作系統。有些人不會讓你寫入正在閱讀的文件...其他人有各種麻煩或需要特殊的「共享」模式才能這樣做。特別是Windows似乎討厭它。 – cHao

+0

因此,在Windows中,在同一個應用程序中,如果沒有「共享」模式,就無法讀取自己的文件?不知道。 – Gray

0

假設文件寫入行爲是庫固有的,您應該檢查其文檔以查看是否可以避免寫入文件系統。 一般來說,如果你想讀取一個正在寫入的文件(即* nix類尾行爲),你可以使用java.io.RandomAccessFile

+0

是的雙重檢查了文檔 – user1015922

+0

我會看看RandomAccessFile,10x – user1015922

相關問題