0

以下は、メモリ不足の問題を示す 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 でメモリ不足になることなくデータ ファイルを読み取るにはどうすればよいですか??

4

2 に答える 2

1

これを使用してみてください:

public static String toBinaryString(byte n) {
StringBuilder sb = new StringBuilder("00000000");
for (int bit = 0; bit < 8; bit++) {
if (((n >> bit) & 1) > 0) {
sb.setCharAt(7 - bit, '1');
}
}
return sb.toString();
}
于 2012-04-22T12:17:47.097 に答える
0

バイトをジャグリングする代わりに、別のアプローチを試して、文字列解析を文字列パーサーに任せて、出力を収集することをお勧めします。

public static ArrayList<int> readFile(String fileName) {  // or ArrayList<short>
    String sdPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/";

    Scanner s = new Scanner(new FileInputStream(new File(sdPath + fileName)));

    ArrayList<int> data = new ArrayList<int>();

    while( s.hasNext() ) {
        data.add( s.nextInt() );
    }

    return data; 
}
于 2012-04-22T16:19:21.337 に答える