2015-05-25 6 views
-3

Мне нужно отправить видеофайл на parse.com. Parse com работает с байтом [].Исключение OutOfMemory при получении массива байтов

Я получаю массив байтов из видеофайла, и он работает нормально. Когда я использовать огромное видео файл как 100 мб он дает мне:

05-25 16:27:48.934 23544-23544/com.ray.tapinto E/art﹕ Out of memory: Heap Size=192MB, Allocated=80MB, Capacity=512MB 
05-25 16:27:48.934 23544-23544/com.ray.tapinto E/art﹕ Throwing OutOfMemoryError "Failed to allocate a 134215692 byte allocation with 16777120 free bytes and 111MB until OOM" 
05-25 16:27:48.934 23544-23544/com.ray.tapinto E/CrashReporting﹕ ParseCrashReporting caught a OutOfMemoryError exception for com.ray.tapinto. Building report. 
05-25 16:27:48.944 23544-23544/com.ray.tapinto E/CrashReporting﹕ Handling exception for crash 
    java.lang.OutOfMemoryError: Failed to allocate a 134215692 byte allocation with 16777120 free bytes and 111MB until OOM 
      at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91) 
      at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201) 
      at com.ray.tapinto.ui.activity.ViewPagerActivity.getBytes(ViewPagerActivity.java:523) 
      at com.ray.tapinto.ui.activity.ViewPagerActivity.onActivityResult(ViewPagerActivity.java:494) 
      at android.app.Activity.dispatchActivityResult(Activity.java:6163) 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3877) 
      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3931) 
      at android.app.ActivityThread.access$1300(ActivityThread.java:144) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1408) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:155) 
      at android.app.ActivityThread.main(ActivityThread.java:5721) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824) 

использование:

... 
    InputStream iStream = getContentResolver().openInputStream(videoUri); 
        byte[] inputData = getBytes(iStream); 
    .... 
     private byte[] getBytes(InputStream inputStream) throws IOException { 
       ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 
       int bufferSize = 1024; 
       byte[] buffer = new byte[bufferSize]; 

       int len = 0; 
       while ((len = inputStream.read(buffer)) != -1) { 
        byteBuffer.write(buffer, 0, len); 
       } 
       return byteBuffer.toByteArray(); 
      } 

Авария на линии byteBuffer.write(buffer, 0, len);

Сохранения файла через разбор

final ParseFile imageFile = new ParseFile(filename, imageData); 

     imageFile.saveInBackground(new SaveCallback() { 
      @Override 
      public void done(ParseException e) { 
       if(e==null){ 
       } 
      } 
     } 

РЕШЕНИЯ Я обнаружил, что parse.com позволяет отправлять только файлы размером менее 10 Мбайт, поэтому он предназначен только для хранения небольших данных, таких как URL-адреса, миниатюры и т. Д.

ответ

0

При работе с большими файлами не рекомендуется загружать их в память за один раз. Когда вы воспроизводите видео, вы передаете поток из файла в медиадекодер. Перед воспроизведением вы не загружаете все это в память.

+0

мне нужно отправить файл на сервер parse.com. Parse com работает только с байтом [] –

+1

Покажите этот бит кода, который использует их API. Вы, вероятно (можно надеяться) можете отправить куски 'byte []' – weston

+0

, добавленные в раздел Parse part –

-1

Вы должны дать вашей JVM больше памяти, как -Xmx512m или даже больше -Xmx1g

+1

нет jvm на android ... – Selvin

0

Существует ограничение на размер файла объекта в разборе. Предельный размер объекта составляет 10MB

PFFile

PFFile позволяет хранить файлы приложений в облаке, что бы иначе было бы слишком большим или громоздким, чтобы поместиться в обычный PFObject. Наиболее распространенным вариантом использования является сохранение изображений, но вы также можете использовать его для документов, видео, музыки и любых других двоичных данных (до 10 мегабайт).

для получения более подробной информации The PFFile

Смежные вопросы