我遇到了新文件格式的问题我被要求在工作中实施。
基本上,该文件是一个文本文件,其中包含一堆包含有关UTC-8中数据的信息的标题,然后文件的其余部分是二进制数字数据。我可以编写数据并将其读回来,我最近添加了代码来编写标题。 问题是我不知道如何读取包含文本和二进制数据的文件。我希望能够读入并处理标头信息(这是相当广泛的),然后能够继续读取二进制数据,而无需重新遍历标头。这可能吗?
我目前正在使用FileInputStream
来读取二进制数据,但我不知道如何在数据的开头启动它,而不是整个文件的开头。其中一个FileInputStream
的构造函数使用FileDescriptor
作为参数,我认为这是我的答案,但我不知道如何从另一个文件读取类中获取一个。我正确接近这个吗?
答案 0 :(得分:0)
您可以FileInputStream
通过getChannel()
通过position()
并在该频道上调用FileInputStream
,将{{1}}重新定位到任意点。
需要注意的是,此位置会影响流的所有消费者。如果您从同一文件的不同部分读取不同的线程(例如),则不适用。在这种情况下,为每个消费者创建一个单独的{{1}}。
此外,此技术仅适用于文件流,因为可以随机访问基础文件。套接字,命名管道或其他任何实际上是流的等效项都没有。