我需要将视频文件发送到parse.com。 Parse com正在使用byte []。
我从视频文件中获取字节数组,并且它正常工作。当我使用像100 mb这样的巨大视频文件时,它给了我:
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只允许发送少于10mb的文件,因此它只能用于存储一些小数据,如网址,缩略图等
答案 0 :(得分:0)
处理大文件时,一次性将它们加载到内存中并不是一个好习惯。播放视频时,您将从文件流式传输到媒体解码器。在播放之前,请不要将其全部加载到内存中。
答案 1 :(得分:0)
解析时对象文件大小有限制。 对象的大小限制为10MB
PFFile
PFFile允许您将应用程序文件存储在云中 否则太大或太麻烦,不适合普通的PFObject。 最常见的用例是存储图像,但您也可以使用它 文档,视频,音乐和任何其他二进制数据(最多10个 兆字节)。
了解更多详情The PFFile
答案 2 :(得分:-1)
你需要给你的jvm更多的内存,比如-Xmx512m甚至更多-Xmx1g