0

我被要求在工作中实施的新文件格式有问题。

基本上,该文件是一个文本文件,其中包含一堆包含有关 UTC-8 数据信息的标题,然后文件的其余部分是二进制的数字数据。我可以很好地写入数据并将其读回,并且我最近添加了代码来编写标题。问题是我不知道如何读取包含文本和二进制数据的文件。我希望能够读入并处理标头信息(相当广泛),然后能够继续读取二进制数据而无需重新遍历标头。这可能吗?

我目前正在使用 aFileInputStream来读取二进制数据,但我不知道如何在数据的开头而不是整个文件的开头开始它。其中一个FileInputStream构造函数将 aFileDescriptor作为参数,我认为这是我的答案,但我不知道如何从另一个文件读取类中获取一个。我正确地接近这个吗?

4

1 回答 1

0

您可以通过获取其通道并调用该通道来将 a 重新定位FileInputStream到任意点。getChannel()position()

需要注意的是,这个位置会影响流的所有消费者。如果您有不同的线程(例如)从同一文件的不同部分读取,则不适合。FileInputStream在这种情况下,为每个消费者创建一个单独的。

此外,此技术仅适用于文件流,因为可以随机访问底层文件。套接字、命名管道或其他任何实际上是流的东西都没有等价物。

于 2013-03-20T18:24:56.877 回答