我有一个带有10亿数字pi的.txt文件。我在文件中读取了一个字符串,但是我得到一个OutOfMemoryError。它与1个MIllion数字合作。我将字符串保存为char []数组。 当我在整个数组中循环时,是否有可能以某种方式流式传输.txt文件?我只需要一种方法来以数组的形式访问所有10亿位数。阅读巨大的文本文件Java
3
A
回答
4
0
这不仅是可能的:它既是极力推荐,并在实践完成。通常做的是重用与Java库(InputStream等)相同类型的接口。
在这种情况下,这可能意味着一个新的IntegerInputStream类,它将数字输出为流。这个班本身可以将呼叫转移到FileInputStream
。在内部,您可以使用char []数组来存储缓冲区并提高性能,或者按照Pavel的建议通过BufferedInputStream
指定呼叫,但最好将消费者与内部缓冲区管理隔离开,并保持适当的抽象级别以供使用大小写(pi的小数点)。
0
您可以使用FileInputStream
打开文件,然后以byte []为单位读取它以避免OOMError。
0
根据文档
你应该能够得到长度的字符串Integer.MAX_VALUE的(总是2147483647(231 - 1)由Java说明书中,阵列的最大尺寸,这String类使用内部存储)或一半的最大堆大小(因为每个字符是两个字节),取其较小者
这就是为什么你得到的异常,
,如果你不真正需要的全1B字符。您可以尝试使用不会将整个内容加载到内存中的缓冲区。
BufferedReader br = new BufferedReader(new FileReader(new File("path to file")));
char[] data=new char[1000000] ;//however many chars you want;
int i=0;
while ((c = br.read()) != -1 && i<data.length) {
data[i++]= c;
}
br.close();
相关问题
- 1. 在Python中阅读巨大文件
- 2. 阅读大文本文件的n行
- 3. 阅读Java中的文本文件
- 4. 阅读meshgrid从文件中的巨蟒
- 5. 阅读大文本文件和内存
- 6. PHP阅读大文本文件
- 7. Java的阅读大量文本文件分隔符
- 8. 阅读大文件
- 9. 阅读Java文件
- 10. 阅读巨大的tar.gz文件流类似的方式,逐行
- 11. 如何阅读大文本文件,并在Java中使用它
- 12. 阅读大文件(Java堆空间)
- 13. 在Java中阅读大文件
- 14. 阅读大文件错误“outofmemoryerror”(java)
- 15. 搜索巨大的文本文件
- 16. PHP从巨大的文本文件
- 17. Python:如何将巨大的文本文件读入内存
- 18. 如何读取PHP中的巨大文本文件?
- 19. Q/kdb +读取巨大的文本文件
- 20. Java文本阅读器
- 21. 阅读XML与阅读CSV文件java
- 22. 阅读文本文件
- 23. jquery - 阅读文本文件?
- 24. 阅读文本文件
- 25. 阅读文本文件
- 26. 阅读文本文件
- 27. 阅读文本文件
- 28. Android阅读文本文件
- 29. 阅读文本文件
- 30. 阅读文本文件,matlab
什么样的处理你需要读取的数据呢? – Berger
我正在循环查看整个字符数组以寻找特定的数字...所以只需通过数组循环。多数民众赞成在 – Steakie
你是什么意思的“寻找一定数量”?数字是pi。你的意思是“寻找特定的数字序列”?如果是这样,多少位数? –