读写FREByteArray

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:读写FREByteArray
  • 本文链接:http://zengrong.net/post/1628.htm

读写FREByteArray

由于AIR的File API在Android上设备上的限制,我在 ANEToolkit 的 Storage 工具中,提供了 readFilewriteFile 方法。这两个方法提供将 ByteArray 作为文件写入 Android 设备,或者从 Android 设备中读取一个文件,并作为 ByteArray 返回。

本来挺简单的一个功能,可调试来调试去总是报错。插件的调试并不那么容易,必须不断的打包插件、打包APK,测试APK。而且这样的功能只能在手机上调试才行。

弄了几个小时,把注意事项总结如下:

  • 在将JAVA的byte[]数组写入FREByteArray对象之前,需要先设定FREByteArray的length属性,否则写入不会成功;
  • 从FREByteArray对象中读取AS的ByteArray,不能使用ByteBuffer.array(),应该使用ByteBuffer.get(byte[])。

以下代码取自ReadFile.java

FileInputStream __inputFile = new FileInputStream(__file);
byte[] __byte = new byte[(int) __file.length()];
__inputFile.read(__byte);
__inputFile.close();
FREByteArray __ba = FREByteArray.newByteArray();
//必须先设置length,否则写入数据不会成功,这点非常重要!
__ba.setProperty("length", FREObject.newObject(__file.length()));
//设置属性必须在捕获锁定之前
__ba.acquire();
ByteBuffer __bb = __ba.getBytes();
__bb.put(__byte);
__ba.release();
return __ba;

以下代码取自WriteFile.java

/**
 * 将FREByteArray转换成byte[]
 * @param $ba
 * @return
 * @throws FREWrongThreadException 
 * @throws FREInvalidObjectException 
 * @throws IllegalStateException 
 */
public byte[] getByteArray(FREByteArray $ba) throws IllegalStateException, FREInvalidObjectException, FREWrongThreadException
{
    //锁定参数
    $ba.acquire();
    ByteBuffer __bb = $ba.getBytes();
    //建立一个数组保存传递来的参数
    byte[] __byte = new byte[(int) $ba.getLength()];
    __bb.get(__byte);
    $ba.release();
    //获取字节数组
    return __byte;
}