ファイル サイズが非常に大きい場合、この行で Android プログラムがクラッシュします。プログラムのクラッシュを防ぐ方法はありますか?
byte[] myByteArray = new byte[(int)mFile.length()];
追加の詳細:- サーバーにファイルを送信しようとしています。エラーログ-
E/dalvikvm-heap(29811): Out of memory on a 136309996-byte allocation.
ファイル サイズが非常に大きい場合、この行で Android プログラムがクラッシュします。プログラムのクラッシュを防ぐ方法はありますか?
byte[] myByteArray = new byte[(int)mFile.length()];
追加の詳細:- サーバーにファイルを送信しようとしています。エラーログ-
E/dalvikvm-heap(29811): Out of memory on a 136309996-byte allocation.
ファイルを読み取るときは、ストリームを使用する必要があります。サーバーへの送信について言及したので、そのファイルをサーバーにストリーミングする必要があります。
他の人が述べたように、データ サイズを考慮する必要があります (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);
}
あなたのニーズに合うように十分に明確であることを願っています。
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);