读写FREByteArray
由于AIR的File API在Android上设备上的限制,我在 ANEToolkit 的 Storage 工具中,提供了 readFile 和 writeFile 方法。这两个方法提供将 ByteArray 作为文件写入 Android 设备,或者从 Android 设备中读取一个文件,并作为 ByteArray 返回。
本来挺简单的一个功能,可调试来调试去总是报错。插件的调试并不那么容易,必须不断的打包插件、打包APK,测试APK。而且这样的功能只能在手机上调试才行。
弄了几个小时,把注意事项总结如下:
- 在将JAVA的byte[]数组写入FREByteArray对象之前,需要先设定FREByteArray的length属性,否则写入不会成功;
- 从FREByteArray对象中读取AS的ByteArray,不能使用ByteBuffer.array(),应该使用ByteBuffer.get(byte[])。
以下代码取自ReadFile.java
1FileInputStream __inputFile = new FileInputStream(__file);
2byte[] __byte = new byte[(int) __file.length()];
3__inputFile.read(__byte);
4__inputFile.close();
5FREByteArray __ba = FREByteArray.newByteArray();
6//必须先设置length,否则写入数据不会成功,这点非常重要!
7__ba.setProperty("length", FREObject.newObject(__file.length()));
8//设置属性必须在捕获锁定之前
9__ba.acquire();
10ByteBuffer __bb = __ba.getBytes();
11__bb.put(__byte);
12__ba.release();
13return __ba;
以下代码取自WriteFile.java
1/**
2 * 将FREByteArray转换成byte[]
3 * @param $ba
4 * @return
5 * @throws FREWrongThreadException
6 * @throws FREInvalidObjectException
7 * @throws IllegalStateException
8 */
9public byte[] getByteArray(FREByteArray $ba) throws IllegalStateException, FREInvalidObjectException, FREWrongThreadException
10{
11 //锁定参数
12 $ba.acquire();
13 ByteBuffer __bb = $ba.getBytes();
14 //建立一个数组保存传递来的参数
15 byte[] __byte = new byte[(int) $ba.getLength()];
16 __bb.get(__byte);
17 $ba.release();
18 //获取字节数组
19 return __byte;
20}
- 文章ID:1628
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/frebytearray_rw/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。