本文提供了有关阅读文本文件的提示。但我首先想要阅读the whole file。然后我想通过new String(bytes, "UTF-8")
创建一个字符串。但是我需要大量的内存来完成这项操作。如何将字节转换的并行进程转换为字符串并释放字节。我的意思是当一个新的字符串符号从字节出现在内存中时,这个字节被释放。
答案 0 :(得分:1)
在FileInputStream中执行read方法的多次调用,并为每次调用读取所需的字节数量:
public int read(byte[] b,
int off,
int len)
为读取的len个字节块创建一个新字符串。 然后连接字符串。
无论如何,这无助于节省大量内存。
答案 1 :(得分:0)
您无法一次有效地构建一个String。
我认为你能做到的最好是:
String str = null;
BufferedReader r = new BufferedReader(new FileReader("filename", "UTF-8"));
try {
StringBuilder sb =
new StringBuilder(/* approx size of file in CHARACTERS */);
int ch;
while ((ch = r.read()) != -1) {
sb.append((char) ch);
}
str = sb.toString();
} finally {
r.close();
}
如果您对文件大小的估计是好的(并且不小于实际大小!),这将不会使用比绝对必要更多的空间。问题是操作系统报告的文件大小将以字节为单位而不是以字符为单位,并且对于像UTF-8这样的编码方案,两种大小之间没有简单的关系。