Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 上载要分析的较大文件时可能出现OutOfMemoryException_Android_Parse Platform - Fatal编程技术网

Android 上载要分析的较大文件时可能出现OutOfMemoryException

Android 上载要分析的较大文件时可能出现OutOfMemoryException,android,parse-platform,Android,Parse Platform,我正在尝试为我的应用程序解析一个可能的后端,但在处理我想上传到它的大文件时,我有一个顾虑 文档中说我需要将一个文件转换为字节数组,并将其传递到解析文件,就像这样 byte[] data = "Working at Parse is great!".getBytes(); ParseFile file = new ParseFile("resume.txt", data); 然而,一个大文件显然会在这里抛出一个OutOfMemoryException,因为将文件加载到字节数组会将整个内容加载到内

我正在尝试为我的应用程序解析一个可能的后端,但在处理我想上传到它的大文件时,我有一个顾虑

文档中说我需要将一个文件转换为
字节数组
,并将其传递到
解析文件
,就像这样

byte[] data = "Working at Parse is great!".getBytes();
ParseFile file = new ParseFile("resume.txt", data);
然而,一个大文件显然会在这里抛出一个
OutOfMemoryException
,因为将文件加载到字节数组会将整个内容加载到内存中


所以我的问题是,如何上传一个大文件进行解析,同时避免出现OOME?

一个可能的解决方案是读取大文件的部分内容,然后分别上传每个部分。你需要这样做,当你再次下载文件时,你可以重新组装文件。

如果你的用户完全控制了上传过程,那么很有可能会导致应用程序崩溃,因为许多用户对文件大小没有很好的理解。我注意到parse有限制在10MB的内存,很遗憾他们没有在android上实现同样的功能


我认为您必须使用他们的RESTAPI手动执行此操作。看看他们的RESTAPI,更具体地说是。您可以轻松地将
HttpURLConnection
FileInputStream
结合使用,这为使用流的上传过程提供了更大的灵活性。我通常更喜欢手动操作,而不是使用不清楚幕后发生了什么的包装器,但是如果你不清楚,我可以发布一个简单的示例。

没有理由不能使用REST API并使用正常的http 1.1头来分块上传

你应该仔细阅读“分块编码”,并找出如何在android中分割整个字节数组,如果它真的那么大的话

在安卓系统中,在发送器中,您必须对内容进行分段,在有流的两侧显式管理io

在输出流中,您应该能够直接连接到http请求对象“OUT stream”。输入端只是读取输入文件中较小的块,因此可以节省内存

您设置了http连接

连接它

获取http连接请求的扩展流,并将其传递给正在处理分块的streamCopy util

HTTP请求头:

> Transfer-Encoding: chunked
> Expect: 100-continue
解析u中的HTTP响应头应该看到

表示“100 continue”的内容,表示它正在等待附加到请求的outputstream后面的分块进程发送更多数据

记住在使用http POST时关闭流/连接


注意-如果你有大文件,你真的应该质疑你从大文件中得到了什么。所有类型的媒体文件都允许您在上载之前修剪大小

任何可能的例子,比如我如何知道在哪里分割文件,以便安全地将该部分加载到内存中?这对于不同类型的设备也必须是安全的,例如,规格较低的设备。你可能会认为这在android上更为重要,因为android有硬内存限制,而iOS对内存的输入量更为宽松。无论如何,我会看一看this@tyczj你完全正确,更不用说android生态系统一直在以光速增长。用户群和开发者社区庞大,可能
parse.com
有点赶超domost文件将是图像,但是我希望用户能够访问从设备上的摄像头拍摄的全分辨率图像,并且支持不同的屏幕大小在我上传之前缩放图像在平板电脑上甚至电视屏幕上都不好看例如,使用chromecast。我认为RESTAPI将是我关于Ccast的最佳选择。我的经验是,你可以将静态图片减少到1080p,它们在电视机上看起来很棒。因此,从一张12Mpix的照片开始,通过位图处理将其降低到1080p,然后上传到parse。这在一个大的jpg/png上至少可以节省80%。你可以做数学计算。1080p电视机只能支持这么多像素。大多数手机摄像头拍摄的照片比电视拍摄的照片多得多。如果你只打算一次在电视上显示一个小区域,那么这将是一个不同的故事-Chromecast IMO面临的相当复杂的事情。冒着死胡闹的风险。。。我的经验与CC和解析和照片是,我可以削减一个12米的照片到250-350K,然后上传到解析,然后显示在CC上的电视,它看起来非常,非常好。