是否有更有效的方法来破坏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...
}
答案 0 :(得分:2)
通过将整个文件读入byte[]
数组,如果文件大于内存中可用于JVM的空间量,那么您将获得OutOfMemoryError
。
相反,您可以将BufferedReader
与FileReader
结合使用。这将允许您逐个读取文件,而无需将整个内容加载到内存中。
BufferedReader in = new BufferedReader(new FileReader("/path/to/my/file"));
要逐个记录加载数据,只需在调用BufferedReader.read
时一次读取300个字节。如果您更喜欢处理单个字段,而不是一次读取300个字节,只需读取与下一个字段长度相对应的字节数。