Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于读取具有页眉和页脚的可变长度文件的接口_Java_File_Io - Fatal编程技术网

Java 用于读取具有页眉和页脚的可变长度文件的接口

Java 用于读取具有页眉和页脚的可变长度文件的接口,java,file,io,Java,File,Io,我可以使用一些提示或技巧来创建一个体面的界面,用于读取具有特殊特性的文件 这些文件的页眉为120字节,正文为1字节,页脚为4字节 页眉包含有关正文的信息,页脚只是正文的一个简单CRC32值 我使用Java,所以我的想法是扩展InputStream类,并在其中添加一个构造函数,例如public MyInStream InputStream,在其中我立即读取头,并直接读取被重写的读的主体 问题是,我不能给类的用户CRC32值,直到整个主体都被读取 因为文件可以是3gb大小,所以将其全部放在内存中是一

我可以使用一些提示或技巧来创建一个体面的界面,用于读取具有特殊特性的文件

这些文件的页眉为120字节,正文为1字节,页脚为4字节

页眉包含有关正文的信息,页脚只是正文的一个简单CRC32值

我使用Java,所以我的想法是扩展InputStream类,并在其中添加一个构造函数,例如public MyInStream InputStream,在其中我立即读取头,并直接读取被重写的读的主体

问题是,我不能给类的用户CRC32值,直到整个主体都被读取

因为文件可以是3gb大小,所以将其全部放在内存中是一个好主意

如果有许多小文件,那么将其全部读入临时文件将对性能造成影响

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

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

感谢您阅读一位疲惫的程序员的困惑想法

再看一次,也许是延伸 输入流是个坏主意

如果类的用户需要以流的形式访问主体,我认为这是一个不错的选择。Java的ObjectOutput/InputStream是这样工作的

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

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

但也许您可以完全封装校验和的处理?假设它是主体的校验和,因此您的类可以始终提前读取4个字节以查看文件何时结束,而不是将最后4个字节作为主体的一部分返回给客户端,而是将它们与读取主体时计算的CRC进行比较,当不匹配时抛出异常