用于读取带有页眉和页脚的可变长度文件的界面

时间:2010-03-31 16:40:49

标签: java file io

我可以使用一些提示或技巧来获得一个合适的界面来读取特殊特征的文件。

有问题的文件有一个标题(~120个字节),一个正文(1个字节 - 3个字节)和一个页脚(4个字节)。

标题包含有关正文和页脚的信息,只是正文的CRC32值。

我使用Java所以我的想法是扩展“InputStream”类并添加一个构造函数,例如“public MyInStream(InputStream in)”,其中我立即读取标题并指示重写的read()是正文。

问题是,在读取整个主体之前,我不能给类的用户CRC32值。

因为文件可以是3gb大,所以把它全部放在内存中是一个想法。

如果有许多小文件,将其全部读入临时文件将会受到性能影响。

我不知道文件有多大,因为InputStream不必是文件,它可以是套接字。

再看一遍,也许扩展InputStream是一个坏主意。

感谢您阅读疲惫的程序员的困惑。 :)

1 个答案:

答案 0 :(得分:0)

  

再看一遍,也许延伸   InputStream是个坏主意。

如果该类的用户需要以流的形式访问正文,则IMO不是一个糟糕的选择。 Java的ObjectOutput/InputStream就像这样。

  

我不知道文件有多大   因为InputStream没有   要成为一个文件,它可以是一个套接字。

嗯,那么你的问题不是选择Java类,而是使用文件格式的设计。如果您无法更改格式,那么在读取所有文件之前,您无法做任何事情来使文件末尾的数据可用。

但也许您可以完全封装校验和的处理?据推测它是身体的校验和,因此你的类总是可以“预读”4个字节以查看文件何时结束,而不是将最后4个字节作为正文的一部分返回给客户端,而是将它们与读取时计算的CRC进行比较身体,当它不匹配时抛出异常。