tl / dr: мне нужно обновлять некоторые значения в моем приложении, используя значения в ~ 10 маленьких файлах, но я волнуюсь, что чтение значения снова и снова приведет к большим накладным расходам GC. Создаю ли я группу небуферизованных программ чтения файлов и опрашиваю их, или есть ли какой-либо способ «сопоставить» значения в файле в java Double, который я могу повторно запустить через мгновение, когда значение (возможно) изменилось?
Длинная версия: у меня есть несколько физических датчиков (гироскоп, тахометр), которые ev3dev услужливо выставляют свои текущие значения в виде небольших файлов в виртуальной файловой системе. Как один файл с именем "/ sys / bus / lego / drivers / ev3-analog-sensor / angle", который содержит 56.26712
Или в следующий момент он содержит 58.9834
И я бы хотел, чтобы значение в моем приложении было как можно более синхронизировано с этим файлом. Я мог бы иметь ваш стандартный цикл, содержащий MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
(из здесь ), но это выглядит как чрезмерное распределение ресурсов, если поместить его в быстрый цикл.
Может быть, что-то со сканером, или
FileChannel inChannel = aFile.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(inChannel.read(buffer) > 0)...
Я не нашел магическую функцию KeepInSyncWithFile(myFloatArray, File("./angle", MODE.FILE_TO_VALUE, 10, TimeUnits.MS)
Java 8 +