我需要在循环中读取一个大文本文件。
我在代码中使用set Buffer 1024 * 1024尝试了这个解决方案,但android应用程序中文本文件的输出不完整。
有什么想法吗? 谢谢
u = new URL(path);
HttpURLConnection c = (HttpURLConnection) u
.openConnection();
c.setRequestMethod("GET");
c.connect();
InputStream in = c.getInputStream();
final ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 1024];
in.read(buffer);
bo.write(buffer);
String s = bo.toString();
final Vector<String> str = new Vector<String>();
String[] line = s.split("\n");
int index = 0;
while (index < line.length) {
str.add(line[index]);
index++;
}
答案 0 :(得分:1)
你正在做的事情根本没有意义。
首先。你正在分配一个巨大的缓冲区(1MB)并没有错,但不是最好的选择。您通常有一个小缓冲区(例如4KB)并在输入文件上循环,直到您到达文件结束(EOF),每次从文件中读取一个字符串时,您应将其附加到StringBuilder对象。
二。您正在读取变量中的字符串,然后将其拆分为数组,然后再将其连接到字符串中。这有什么意义呢?
有很多关于如何在Android中阅读文本文件的示例,例如here,here和here。
编辑:
在我放置的那些链接中,有一些示例用于逐行读取文件,因此您不必搜索换行符。另外,如果你想在数组中使用行,你可以通过删除将新读取的字符串附加到StringBuilder的代码,并将其替换为将新读取的字符串添加到数组中的代码。