我有一个包含10亿个π的数字的.txt文件。我将其作为字符串读入,但是会出现OutOfMemoryError错误。当我只有100万个数字时,它可以正常工作。我将字符串保存为char[]数组。
是否可能在循环遍历整个数组时以某种方式流式传输.txt文件?我只需要一种方法来将所有10亿个数字作为数组访问。
public int read(char cbuf[], int offset, int length) throws IOException
我建议你从那里开始
BufferedInputStream
的相关性在哪里? - Holger这不仅是可能的,而且强烈建议并已经实践。通常做法是重用与Java库相同类型的接口(如InputStream等)。
在这种情况下,这可能意味着一个新的IntegerInputStream类,它将数字作为流输出。该类本身可以转发对FileInputStream的调用。在内部,您可以使用char[]数组来存储缓冲区并提高性能,或者像Pavel建议的那样通过BufferedInputStream进行调用,但最好将消费者与内部缓冲区管理隔离,并保持适当的抽象级别以符合使用案例(如圆周率的小数点)。
FileInputStream
打开文件,逐个字节地读取它们的 byte[],以避免 OOMError。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();
read(char[])
呢?这样,你就不需要使用BufferedReader
来解决过多的read()
调用问题了... - Holger
char
。 - Holger