Я создаю пустой файл нужной длины в Android, используя Java следующим образом:
long length = 10 * 1024 * 1024 * 1024;
String file = "PATH\\File.mp4";
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
randomAccessFil.setLength(length);
Этот код создает файл с желаемой длиной и данными NULL
. Затем я записываю данные в файл следующим образом:
randomAccessFile.write(DATA);
Теперь мой вопрос: я хочу извлечь конец данных, записанных в файл. Я написал эту функцию, чтобы как можно быстрее найти конец данных с помощью двоичного поиска:
long extractEndOfData(RandomAccessFile accessFile, long from, long end) throws IOException {
accessFile.seek(from);
if (accessFile.read() == 0) {
//this means no data has written into the file
return 0;
}
accessFile.seek(end);
if (accessFile.read() != 0) {
return end + 1;
}
long mid = (from + end) / 2;
accessFile.seek(mid);
if (accessFile.read() == 0) {
return extractEndOfData(accessFile, from, mid - 1);
} else {
if (accessFile.read() == 0) {
return mid + 1;
} else {
return extractEndOfData(accessFile, mid + 1, end);
}
}
}
и я вызываю эту функцию следующим образом, чтобы найти конец данных в файле:
long endOfData = extractEndOfData(randomAccessFile, 0, randomAccessFile.length() - 1);
Эта функция отлично работает для файлов, если их данные начинаются с данных NON-NULL
, и среди данных нет таких данных NULL
, как этот:

Но для некоторых файлов это не так. потому что некоторые файлы начинаются с NULL
данных как:

Что я могу сделать, чтобы решить эту проблему? Большое спасибо.