您的位置:首页 > 移动开发 > Android开发

android MemeoryFile和Parcel操作文件描述符fd

2017-05-17 15:12 375 查看
ParcelFileDescriptor pfd; 

FileDescriptor fd;

Parcel p;

static byte[]
testString =
new
byte[] {1,2,3,4,5,6,7,8,9};

byte[] buffer =
new byte[testString.length];

MemoryFile
file = new
MemoryFile("test", 64);//创建匿名共享内存

public
static void
printHexString( byte[]
b){
    for(int i = 0; i< b.length; i++){
      String hex = Interger.toHexString(b[i] & 0xFF);
      if(hex.length() == 1){
hex = '0' + hex;
   }

    Log.e(TAG,"print :" +
new String(hex.toUpperCase()));
  }

    Log.e(TAG,"print end \n\n\n");
}
Setup 1:写文件描述符fd

 pfd = new
ParcelFileDescriptor(file.getFileDescriptor());//获取文件描述符

 fd =  pfd.getFileDescriptor();

 file.writeBytes(testString, 0, 0, testString.length);//向匿名共享内存写数据

 file.readBytes(buffer, 0, 0, testString.length);//从ashmem读数据

 printHexString(testString);//打印写入ashmem的数据

 printHexString(buffer);//打印从ashmem读出的数据
 p = Parcel.obtain();//Parcel类序列化操作
 p.writeFileDescriptor(fd);//写文件描述符
Setup 2:读文件描述符和共享内存数据

 p.setDataPosition(0);

 pfd = p.readFileDescriptor();
 fd =  pfd.getFileDescriptor();//读取Setup 1的文件描述符fd
 MemoryFile
rfd = new
MemoryFile(fd, testString.length,
"r");//从fd描述符后,建立映射
 byte[]
buf = new
byte[9];
 rfd.readBytes(buf, 0, 0, testString.length);//读取ashmem的数据

 printHexString(buf);//打印验证
 file.close();

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: