Чтение данных из файла во время его записи в - PullRequest
5 голосов
/ 27 октября 2011

Я использую собственную библиотеку Java, которая сохраняет свои данные непосредственно в java.io.File, но мне нужно иметь возможность читать данные, чтобы они передавались напрямую. Данные являются двоичными, некоторые файлы мультимедиа.

java.io.File передается в качестве аргумента этой библиотеке, но я не знаю способа получить из нее поток. Есть ли какой-нибудь простой способ сделать это, кроме открытия файла также для чтения и попытки синхронизации операций чтения / записи!?

Желательно, чтобы я пропустил запись в часть файловой системы, поскольку я использую это из апплета и в этом случае требуются дополнительные разрешения.

Ответы [ 2 ]

4 голосов
/ 27 октября 2011

Если одна часть вашей программы выполняет запись в файл, тогда вы сможете читать из этого файла с помощью обычного потока 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);
}
0 голосов
/ 27 октября 2011

При условии, что поведение записи файла является неотъемлемой частью библиотеки, вам следует проверить ее документацию, чтобы узнать, сможете ли вы избежать записи в файловую систему. Вообще говоря, если вы хотите прочитать файл, в который производится запись (например, * nix tail-like поведение), вы можете использовать java.io.RandomAccessFile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...