拆分字节数组以映射 java 类对象中的字段的有效方法
在Java中是否有更有效的方法来分解字节数组中的数据? 我编写了以下函数来读取具有固定长度数据字段的二进制文件。但性能确实很慢,我需要读取一个二进制文件,其中有30,000条记录,每条记录长度为300字节,每条记录包含240个字段。 有什么建议吗?
public void breakField(byte[] input) {
ByteArrayInputStream bais = new ByteArrayInputStream(input);
byte[] tmp = new byte[2];
bais.read(tmp);
this.id = new String(tmp);
tmp = new byte[4];
bais.read(tmp);
this.name = new String(tmp);
tmp = new byte[8];
bais.read(tmp);
this.phone = new String(tmp);
tmp = new byte[15];
bais.read(tmp);
this.otherInfo = new String(tmp);
.... more fields...
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通过将整个文件读入
byte[]
数组,如果文件大于 JVM 内存中可用的空间量,那么您将收到OutOfMemoryError
。相反,您可以使用
BufferedReader
与FileReader 结合使用
。这将允许您逐段读取文件,而无需将整个文件加载到内存中。要逐条记录加载数据,只需在调用
BufferedReader.read
。如果您更喜欢处理单个字段,则不必一次读取 300 个字节,只需读取与下一个字段的长度对应的字节数即可。By reading the entire file into a
byte[]
array, if the file is larger than the amount of space available in memory to the JVM, then you will get anOutOfMemoryError
.Instead, you can use a
BufferedReader
in conjunction with aFileReader
. This will allow you to read the file piece by piece without loading the entire thing into memory.To load the data record-by-record, simply read in 300 bytes at a time when you call
BufferedReader.read
. If you prefer to deal with individual fields, instead of reading 300 bytes at a time, just read the number of bytes that corresponds to the length of the next field.