2011-10-27 11 views
5

私はjava.io.Fileに直接データを保存する専用のJavaライブラリを使用していますが、データを読み込んで直接ストリーミングできるようにする必要があります。データはバイナリで、一部のメディアファイルです。ファイルが書き込まれている間にデータを読み取る

java.io.Fileがこのライブラリの引数として渡されますが、ストリームを取得する方法はわかりません。これを行うにはいくつかの簡単な方法があります。ただし、ファイルを読み込み専用に開いて読み書き操作を同期しようとする場合を除きます。

私はアプレットからこれを使用しているので、ファイルシステム部分への書き込みをスキップしたいと思います。この場合、余分な権限が必要です。

+1

代わりにOutputStreamを渡すことができれば簡単です。それはオプションですか? – laher

答えて

4

プログラムの一部がファイルに書き込む場合、別のスレッドで通常のnew FileInputStream(someFile)ストリームを使用してそのファイルから読み取ることができるはずですが、これはそのような操作のOSサポートに依存します。何かを同期させる必要はありません。さて、あなたは出力ストリームの慈悲と、プログラムの書き込み部分が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

OSによって異なります。あなたが読んでいるファイルに書き込もうとしない人もいますし、他の人はあらゆる種類の問題を抱えているし、そうするために特別な「共有」モードを必要とします。 Windowsは特にそれを嫌うようです。 – cHao

+0

Windowsでは、同じアプリケーション内で、いくつかの「共有」モードなしで自分のファイルを読み取ることはできませんか?それを知らなかった。例を提供するために – Gray

0

ファイルの書き出し動作がライブラリに本質的であると仮定して、ファイルシステムへの書き込みを避けることができるかどうかを調べる必要があります。 一般的に言えば、書き込まれているファイル(* nix tail-likeビヘイビア)を読みたい場合、java.io.RandomAccessFileを使用できます。

+0

はいドキュメントをダブルチェックしました – user1015922

+0

RandomAccessFile、10x – user1015922

関連する問題