0

ファイル サイズが非常に大きい場合、この行で Android プログラムがクラッシュします。プログラムのクラッシュを防ぐ方法はありますか?

byte[] myByteArray      =   new byte[(int)mFile.length()];

追加の詳細:- サーバーにファイルを送信しようとしています。エラーログ-

 E/dalvikvm-heap(29811): Out of memory on a 136309996-byte allocation.
4

4 に答える 4

1

ファイルを読み取るときは、ストリームを使用する必要があります。サーバーへの送信について言及したので、そのファイルをサーバーにストリーミングする必要があります。

他の人が述べたように、データ サイズを考慮する必要があります (1GB は過剰に思えます)。私はこれをテストしていませんが、コードの基本的なアプローチは次のようになります。

// open a stream to the file
FileInputStream fileInputStream = new FileInputStream(filePath);

// open a stream to the server
HttpURLConnection connection = new URL(url).openConnection();
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());

byte[] buffer = new byte[BUFFER_SIZE]; // pick some buffer size
int bytesRead = 0;

// continually read from the file into the buffer and immediately write that to output stream
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
    outputStream.write(buffer); 
}

あなたのニーズに合うように十分に明確であることを願っています。

于 2013-06-17T06:11:00.007 に答える
0

JDK 7 では、Files.readAllBytes(Path).

例:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;

    Path path = Paths.get("path/to/file");
    byte[] myByteArray = Files.readAllBytes(path);
于 2013-06-17T05:44:13.870 に答える