以下は、メモリ不足の問題を示す logcat の結果です。
大きすぎる byte[] 配列に関係している可能性があります。
04-17 22:21:38.773: W/dalvikvm(4963): threadid=1: キャッチされない例外で終了するスレッド (group=0x40a4d1f8) 04-17 22:21:38.781: E/AndroidRuntime(4963): 致命的な例外: メイン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): Exam.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 でメモリ不足になることなくデータ ファイルを読み取るにはどうすればよいですか??