我正在使用Odata4j,我的实体有一个Data
字段,这是一个二进制文件。通过浏览器查看时,它显示为Base64字符串。
如何将此文件存入我的Android设备?
我已尝试以下内容获取byte[]
...
String stringData = entity.getProperty("Data").getValue().toString();
byte[] data = Base64.decodeBase64(stringData);
但这只是给了我一个大约7个字节的小数组。但是,当我调试时,我可以看到entity
数据具有较大的二进制值。
我还遇到第二个文件产生“内存不足”异常的问题,理想情况下我希望能够将此文件作为流/缓冲区直接下载到设备的存储中,这可能吗? / p>
要清楚,问题是:如何将这些数据直接传输到设备的存储空间?
答案 0 :(得分:3)
我在不使用OData的情况下解决了这个问题。有一个可用的URL只返回二进制数据。因此,使用此URL,我可以使用其他Java类将数据直接流式传输到磁盘。
使用此网址:
www.example.com/OData.svc/File/Data/$value
(只返回二进制数据)
我们可以创建一个URL连接并下载它:
URL url = new URL(webPage);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
File file = new File(dir, fileName);//need to create a file based on your storage paths
FileOutputStream out = new FileOutputStream(file);
InputStream in = urlConnection.getInputStream();
byte[] buffer = new byte[1024];
int i = 0;
while ((i = in.read(buffer)) > 0) {
out.write(buffer, 0, i);
}
out.flush();
out.close();
in.close();
答案 1 :(得分:1)
我猜测entity.getProperty("Data").getValue()
实际上正在返回byte[]
或char[]
。当你在一个数组上调用toString()
时(实际上,任何不覆盖toString()
的类型),你将获得一个由对象的类型名称和身份哈希码组成的短字符串。对于{{1或byte[]
,可能是7个字符。
我建议您打印char[]
以确认实际类型。