下面是显示内存不足问题的 logcat 结果。
它可能与太大的 byte[] 数组有关。
04-17 22:21:38.773: W/dalvikvm(4963): threadid=1: 线程退出未捕获异常 (group=0x40a4d1f8) 04-17 22:21:38.781: E/AndroidRuntime(4963): 致命异常: main 04-17 22:21:38.781: E/AndroidRuntime(4963): java.lang.OutOfMemoryError 04-17 22:21:38.781: E/AndroidRuntime(4963): 在 java.nio.CharBuffer.put(CharBuffer.java: 509) 04-17 22:21:38.781: E/AndroidRuntime(4963): 在 java.nio.charset.CharsetDecoder.allocateMore(CharsetDecoder.java:238) 04-17 22:21:38.781: E/AndroidRuntime(4963) : 在 java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:195) 04-17 22:21:38.781: E/AndroidRuntime(4963): 在 java.nio.charset.Charset.decode(Charset.java:487 ) 04-17 22:21:38.781: E/AndroidRuntime(4963): 在 java.lang.String.(String.java:174) 04-17 22:21:38.781: E/AndroidRuntime(4963): 在 java. lang.String.(String.java:141)
04-17 22:21:38.781: E/AndroidRuntime(4963): atexam.militarymgrs.Draw_LOS.readFile(Draw_LOS.java:182)
Draw_LOS.java:182 如下。(字符串 s = 新字符串(dat);)
- - - -源代码 - - - - - - -
public static ArrayList<String> readFile(String fileName) {
//map data access
String sdPath;
sdPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
File file = new File(sdPath+fileName);
//String[] k = new String[1440000];
//String line = "";
ArrayList<String> data = new ArrayList<String>();//consider using ArrayList<int>
try {
FileInputStream fis = new FileInputStream(file);
byte[] dat = new byte[fis.available()];
String s = new String(dat);
String[] k = s.split("[\\r\\n]+");
while(fis.read(dat) != -1) {;}
fis.close();
}
catch(FileNotFoundException fN) {
fN.printStackTrace();
}
catch(IOException e) {
System.out.println(e);
}
return data;
}
应该加载的文件如下
12 32 43 ...
如何使用 fileStream 在没有内存不足的情况下读取数据文件?