APP下载

《android 应用开发》实验课教学实例的设计与探讨

2012-12-31雷蕴陶燎亮

考试周刊 2012年75期

  摘 要: 文章主要讨论手机应用开发实验教学的案例设计, 旨在更充分深入地了解iOS开发和 android 应用开发的不同之处。重视实验教学和实践过程,以学生为主体,培养其主动性、协作精神和创新能力,实实在在地提高实验教学水平。本文介绍了Protocol Buffer技术,并比较了Protocol Buffer和JSON,讨论了两种数据传输格式在网络数据交换中的不同,通过实例说明如何使用Protocol Buffer代替JSON作为iOS应用开发中数据传输格式。
  关键词: Protocol Buffer JSON iOS
  随着苹果iOS系统为越来越多人所使用,iOS应用开发也成为程序员所必须掌握的开发技术之一。在iOS应用开发中,JSON作为网络数据传输格式发挥了较大的作用,但JSON也有很大的局限性。本文通过比较Protocol Buffer和JSON,证明使用Protocol Buffer代替JSON作为iOS网络数据传输中的数据格式的有效性,并以工程应用为背景,进行了设计案例分析。
  一、ProtocolBuffer简介
  Protocol Buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。Google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器及库文件。与XML和JSON不同,它是一种二进制的格式,可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
  二、JSON
  JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集。JSON建构有两种结构:
  (一)“名称/值”对的集合,对于不同的语言中,它被理解为对象、记录、结构、字典、哈希表、有键列表或者关联数组。
  (二)值的有序列表,可以将其理解为数组(array)。
  下面是一个JSON 格式的数据示例:
  {persons:[
  { "id":"1", "name": "sam", "email": "sam@123.com"},
  { "id":"2", "name":"mike", " email ":"mike@123.com"}
  ]};
  三、iOS应用开发
  iOS是由苹果公司开发的手持设备操作系统,使用与iPhone/iPad等苹果手持设备。
  iOS应用(iOS APP)开发使用Objective-C作为开发语言,使用xcode作为主要开发环境。iOS应用,开发完成通过审核后在苹果商店(AppStore)公开发布。
  四、使用Protocol Buffer的优势
  Protocol Buffers把对象序列化为二进制格式,比JSON方式占用更少的网络传输字节数。
  JSON需要服务端和客户端分别自行实现序列化Serializer和反序列化Parser,以实现所需要传输对象的编码和解析。例如当前iOS客户端都会有的大量JSON Parser代码,也会有很多JSON解析开源的工程。而Protocol Buffer,服务端和客户端则使用共同的Message定义文件(.proto)和Protocol Buffer编译器,编译出不同语言适用的源代码文件,从而自动实现了Serializer及Parser,我们可以把代码加入工程直接使用。就客户端来讲,相比自行实现解析字符串的JSON Parser,Protocol Buffer提供的针对二进制数据的Parser在执行效率上要高很多,并且不用我们亲自编写实现代码。
  五、Protocol Buffer使用方法,以C++为例
  (一)编写.proto文件,作为Message声明,服务端和客户端共用。
  例如定义一个Person.proto
  message Person {
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;
  }
  (二)使用Protocol Buffers编译器Protoc,编译.proto文件,生成java/c++/python代码文件。
  IOS端可以使用的是C++代码,以C++为例,命令行输入:
  Protoc –cpp_out=./ Person.proto。
  在当前目录下生成Person.pb.h以及Person.pb.cc。
  (三)在工程里加入生成的Person.h和Person.cc,即可使用以下代码实现读写。
  定义,使用,以及序列化:
  Person person;
  person.set_id(123);
  person.set_name("Bob");
  person.set_email("Bob@example.com");
  fstream out("person.pb", ios::out | ios::binary | ios::trunc);
  person.SerializeToOstream(&out);
  out.close();
  反序列化:
  Person person;
  fstream in("person.pb", ios::in | ios::binary);
  if (!person.ParseFromIstream(∈)) { cerr << "Failed to parse person.pb." << endl; exit(1);}
  六、Protocol Buffer在iOS开发中的应用
  由于iOS开发主要使用Objective-C作为开发语言,需要与C++代码做一些桥接工作,处理为HTTP request和response中适用的Objective-C的类NSData。
  序列化:
  - (NSData *)serializeToNSData:(Person *)person {
  std::string ps = person->SerializeAsString();
  return [NSData dataWithBytes:ps.c_str() length:ps.size()];
  }
  反序列化:
  - (Person *)parseFromNSData:(NSData *)data {
  char raw[[data length]];
  Person *p = new Person;
  [data getBytes:raw length:[data length]];
  p->ParseFromArray(raw, [data length]);
  return p;
  }
  七、结语
  随着计算机技术的发展,近年来智能手机成为嵌入式系统中非常活跃的领域,3G更是刺激了移动互联网发展。Android 作为Google开发的开源手机操作系统,具有良好的开放性,且发展潜力日益扩大。相比较iOS,有其独有的发展优势。本文主要讨论区别于Android应用开发的iOS平台。每个开发者,无论是开发iOS等移动操作系统的应用,标准桌面应用程序或Web应用程序,都都越来越注意到了Protocol Buffer的简单和便捷,将在各个方面得到更广泛的应用,为用户提供更为友好、更为有效的体验。本文旨在为学生设计一个基于ios的移动应用的开发教学案例,培养学生更了解和掌握移动应用开发的技术和能力。
  参考文献:
  [1]Danny Goodman.iOS 4 SDK入门:给JavaScript程序员[M].东南大学出版社,2011.05.
  [2]胡雯.利用JSON实现Ajax中数据传递[J].科技信息,2009(15).
  [3]姜宇.JSON在电子政务信息系统数据交换中的研究与应用[J].科技创新导报,2012(15).
  [4]王魁生,王晓波.利用JSON进行网站客户端与服务器数据交互[J].软件导刊,2010(3).
  项目号:201004Q
  项目名称:浙江省实验教学示范中心