我对Java比较陌生,我试图编写一个简单的android应用程序。我的应用程序的资产文件夹中有大约3500行的大文本文件,我需要将它读入字符串中。我找到了一个很好的例子,说明如何做到这一点,但我有一个问题,为什么字节数组被初始化为1024.我不想将它初始化为我的文本文件的长度?另外,我不想使用char
,而不是byte
?这里是代码:为什么初始化这个字节数组为1024
private void populateArray(){
AssetManager assetManager = getAssets();
InputStream inputStream = null;
try {
inputStream = assetManager.open("3500LineTextFile.txt");
} catch (IOException e) {
Log.e("IOException populateArray", e.getMessage());
}
String s = readTextFile(inputStream);
// Add more code here to populate array from string
}
private String readTextFile(InputStream inputStream) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
inputStream.length
byte buf[] = new byte[1024];
int len;
try {
while ((len = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, len);
}
outputStream.close();
inputStream.close();
} catch (IOException e) {
Log.e("IOException readTextFile", e.getMessage());
}
return outputStream.toString();
}
编辑:根据你的建议,我试过这种方法。它更好吗?谢谢。
private void populateArray(){
AssetManager assetManager = getAssets();
InputStream inputStream = null;
Reader iStreamReader = null;
try {
inputStream = assetManager.open("List.txt");
iStreamReader = new InputStreamReader(inputStream, "UTF-8");
} catch (IOException e) {
Log.e("IOException populateArray", e.getMessage());
}
String String = readTextFile(iStreamReader);
// more code here
}
private String readTextFile(InputStreamReader inputStreamReader) {
StringBuilder sb = new StringBuilder();
char buf[] = new char[2048];
int read;
try {
do {
read = inputStreamReader.read(buf, 0, buf.length);
if (read>0) {
sb.append(buf, 0, read);
}
} while (read>=0);
} catch (IOException e) {
Log.e("IOException readTextFile", e.getMessage());
}
return sb.toString();
}
没错。考虑一下:如果你的字节数组长度与输入流的长度一样长,并且文件的大小应该是4GB,那么你将把所有4GB的文件加载到RAM中,从而减慢计算机的速度,可能导致系统崩溃。这就是为什么您一次读取1024个字节的原因,以最大限度地减少阵列使用的内存量。 – OzzyTheGiant