在写入文件时从文件中读取数据

use*_*922 5 java file stream

我正在使用一个专有的Java库,将其数据直接保存到a中java.io.File,但我需要能够读取数据,以便直接进行流式处理.数据是二进制的,一些媒体文件.

java.io.File作为参数传递给这个库,但我不知道如何从中获取流.有没有一些简单的方法来做到这一点,除了打开文件也读取和尝试同步读/写操作!?

我希望跳过写入文件系统部分,因为我从applet使用它,在这种情况下需要额外的权限.

Gra*_*ray 4

如果程序的一部分正在写入文件,那么您应该能够使用new FileInputStream(someFile)另一个线程中的普通流从该文件中读取数据,尽管这取决于操作系统对此类操作的支持。您不需要同步任何内容。现在,您受到输出流以及程序写入部分调用频率的影响,flush()因此可能会出现延迟。

这是我编写的一个小测试程序,证明它工作正常。阅读部分只是循环,看起来像:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 取决于操作系统。有些不允许您写入正在读取的文件...其他则遇到各种麻烦或需要特殊的“共享”模式才能这样做。Windows 似乎尤其讨厌它。 (2认同)