如何提取Java文件中写入的数据结尾

如何提取Java文件中写入的数据结尾,java,android,file,randomaccessfile,Java,Android,File,Randomaccessfile,我使用如下Java在Android中创建了一个具有所需长度的空文件: long length = 10 * 1024 * 1024 * 1024; String file = "PATH\\File.mp4"; RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw"); randomAccessFil.setLength(length); randomAccessFile.write(DATA); 该代码创建一个

我使用如下Java在Android中创建了一个具有所需长度的空文件:

long length = 10 * 1024 * 1024 * 1024;
String file = "PATH\\File.mp4";
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
randomAccessFil.setLength(length);
randomAccessFile.write(DATA);
该代码创建一个具有所需长度和
NULL
数据的文件。然后我将数据写入文件,如下所示:

long length = 10 * 1024 * 1024 * 1024;
String file = "PATH\\File.mp4";
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
randomAccessFil.setLength(length);
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
数据:

long length = 10 * 1024 * 1024 * 1024;
String file = "PATH\\File.mp4";
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
randomAccessFil.setLength(length);
randomAccessFile.write(DATA);

但对于某些文件,它不是。因为有些文件以
NULL
数据开头,如下所示:


我能做些什么来解决这个问题?非常感谢。

我认为您的问题很清楚:当您只在文件中搜索空值时,您将永远无法找到写入了多少数据(或内容的结尾)。原因是NULL是一个值为0x00的字节,它出现在所有类型的二进制文件(可能不是文本文件)中,另一方面,您的文件用NULL初始化

例如,您可以将写入文件的数据大小存储在文件的前四个字节中。 因此,在将数据写入文件时,首先写入数据长度,然后写入实际数据内容

但我仍然想知道为什么不将文件大小初始化为所需的大小