【发布时间】:2012-03-30 10:11:31
【问题描述】:
问题如下:
几个大文件 (20+ MB) 中包含 DNA 序列。我使用以下代码连接到这些文件:
fc = FileChannel.open(file);
// Create a read-only CharBuffer on the file
ByteBuffer bbuf = fc.map(FileChannel.MapMode.READ_ONLY, 0, 256);
CharBuffer cbuf = Charset.forName("8859_1").newDecoder().decode(bbuf);
我知道要提取的子序列的确切开始和结束位置,这将允许我使用该方法
cbuf.subSequence(start, end);
但是,大文件的行终止符会破坏 DNA 序列,因此它们算作一个字符。不建议假定文件中行的固定宽度。什么是“跳过”行终止符的有效方法,但通过使用 Charbuffer 或类似的东西来保持内存效率?
我已经尝试使用带有正则表达式的贪婪量词,但行终止符又一次破坏了结果。我想不惜一切代价避免完全加载文件内容。有没有办法将换行符视为“不存在”?
【问题讨论】:
-
内存效率真的那么重要吗? 20 MB 不是那么大。数据集总共有多大?
-
这是 C/C++ 还是您使用的是什么语言?
-
编程语言是Java。关于内存效率,文件的处理只是我的程序必须完成的几项任务之一。如果加载整个文件,最好的策略是什么?对于我必须提取的序列数量有些稀疏,删除所有 '\n' 分隔符似乎相当多。
-
DNA 序列不会创建像“无数”字节的文件吗?如果不需要,您是否应该避免加载整个文件?
标签: java newline large-files