我正在使用一个专有的Java库,将其数据直接保存到java.io.File
,但我需要能够读取数据,以便直接进行流式处理。数据是二进制的,一些媒体文件。
java.io.File
作为参数传递给这个库,但我不知道如何从中获取流。有没有一些简单的方法可以做到这一点,除了打开文件也是为了读取和尝试同步读/写操作!?
我希望跳过写入文件系统部分,因为我在applet中使用它,在这种情况下需要额外的权限。
答案 0 :(得分: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);
}
答案 1 :(得分:0)
假设文件写入行为是库固有的,您应该检查其文档以查看是否可以避免写入文件系统。 一般来说,如果你想读取正在写入的文件(即* nix尾部行为),你可以使用java.io.RandomAccessFile