我正在尝试读取文件并将其上载到服务器,大小为1 MB。它工作正常高达13 MB,但之后,它给我OutOfMemory异常。我已经检查过缓冲区,它总是有1MB的大小,但我不知道它为什么会进入异常。 1件事我预测,以前的读取字节没有立即得到免费的系统,所以我试图找到一些方法来释放它,但没有任何方法与字节[]释放。OutOfMemory错误,同时在Android中创建大文件的块
ByteArrayOutputStream byteBuffer = null;
try {
byteBuffer = new ByteArrayOutputStream();
byte[] buffer = new byte[maxchunksize];
int len = 0;
int startpoint = 0;
while ((len = is.read(buffer)) != -1) {
Log.i("Upload Chunk",""+buffer.length);
byteBuffer.write(buffer, 0, len);
String uploadresponse = UploadChunk(fileHandle, buffer, startpoint, EmailID);
if(!uploadresponse.equals("Chunk Added"))
{
Log.e("Upload Chunk", "something went wrong. Aborting upload");
break;
}
startpoint += buffer.length;
}
任何人都可以帮助我解决这个问题吗?我的文件最大大小是25MB。
这是我得到的例外。
06-26 22:49:22.329: E/AndroidRuntime(15645): java.lang.OutOfMemoryError
06-26 22:49:22.329: E/AndroidRuntime(15645): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
06-26 22:49:22.329: E/AndroidRuntime(15645): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
06-26 22:49:22.329: E/AndroidRuntime(15645): at com.desiengineer.backgroundtask.EvidenceUploadService.onHandleIntent(EvidenceUploadService.java:101)
06-26 22:49:22.329: E/AndroidRuntime(15645): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
06-26 22:49:22.329: E/AndroidRuntime(15645): at android.os.Handler.dispatchMessage(Handler.java:99)
06-26 22:49:22.329: E/AndroidRuntime(15645): at android.os.Looper.loop(Looper.java:137)
06-26 22:49:22.329: E/AndroidRuntime(15645): at android.os.HandlerThread.run(HandlerThread.java:60)
你在UI线程上做它吗? –
不,它在IntentService上。 – user2376920
我猜你是在'onHandleIntent'中弹出'InternService'创建的当前线程的堆栈内存(注意这里是:'06-26 22:49:22.329:E/AndroidRuntime(15645):at java.io.ByteArrayOutputStream.write (ByteArrayOutputStream.java:201)')。尝试调试以测试您的缓冲区逻辑是否正确。 –