protocol-buffers简介

青旅半醒 2021-11-01 14:06 455阅读 0赞

执行安卓 自动化测试开的时候,需要安装一个库 protocol-buffers,这个库强大的。来看看这么使用,是做什么的?

https://developers.google.com/protocol-buffers/docs/pythontutorial

定义

与语言无关,平台无关的可扩展机制,用于序列化结构化数据。类似Json或者XML的数据传输格式和规范,用于不同应用或进程之间进行通信时使用。通信时所传递的信息是通过Protobuf定义的message数据结构进行打包,然后编译成二进制的码流再进行传输或者存储。

优点

我们常用就是xml和json文件。相比这个而言,简单、小、快、兼容性高!

用法

通过在.proto文件中定义协议缓冲区消息类型来指定您希望如何构建序列化信息。每个协议缓冲区消息都是一个小的逻辑信息记录,包含一系列名称 - 值对。
.proto的用法优点类似c++ 和java。

https://developers.google.com/protocol-buffers/docs/pythontutorial

上面链接是python的demo。
这个写入数据

  1. #! /usr/bin/python
  2. import addressbook_pb2
  3. import sys
  4. # This function fills in a Person message based on user input.
  5. def PromptForAddress(person):
  6. person.id = int(raw_input("Enter person ID number: "))
  7. person.name = raw_input("Enter name: ")
  8. email = raw_input("Enter email address (blank for none): ")
  9. if email != "":
  10. person.email = email
  11. while True:
  12. number = raw_input("Enter a phone number (or leave blank to finish): ")
  13. if number == "":
  14. break
  15. phone_number = person.phones.add()
  16. phone_number.number = number
  17. type = raw_input("Is this a mobile, home, or work phone? ")
  18. if type == "mobile":
  19. phone_number.type = addressbook_pb2.Person.MOBILE
  20. elif type == "home":
  21. phone_number.type = addressbook_pb2.Person.HOME
  22. elif type == "work":
  23. phone_number.type = addressbook_pb2.Person.WORK
  24. else:
  25. print "Unknown phone type; leaving as default value."
  26. # Main procedure: Reads the entire address book from a file,
  27. # adds one person based on user input, then writes it back out to the same
  28. # file.
  29. if len(sys.argv) != 2:
  30. print "Usage:", sys.argv[0], "ADDRESS_BOOK_FILE"
  31. sys.exit(-1)
  32. address_book = addressbook_pb2.AddressBook()
  33. # Read the existing address book.
  34. try:
  35. f = open(sys.argv[1], "rb")
  36. address_book.ParseFromString(f.read())
  37. f.close()
  38. except IOError:
  39. print sys.argv[1] + ": Could not open file. Creating a new one."
  40. # Add an address.
  41. PromptForAddress(address_book.people.add())
  42. # Write the new address book back to disk.
  43. f = open(sys.argv[1], "wb")
  44. f.write(address_book.SerializeToString())
  45. f.close()

读取数据

  1. #! /usr/bin/python
  2. import addressbook_pb2
  3. import sys
  4. # Iterates though all people in the AddressBook and prints info about them.
  5. def ListPeople(address_book):
  6. for person in address_book.people:
  7. print "Person ID:", person.id
  8. print " Name:", person.name
  9. if person.HasField('email'):
  10. print " E-mail address:", person.email
  11. for phone_number in person.phones:
  12. if phone_number.type == addressbook_pb2.Person.MOBILE:
  13. print " Mobile phone #: ",
  14. elif phone_number.type == addressbook_pb2.Person.HOME:
  15. print " Home phone #: ",
  16. elif phone_number.type == addressbook_pb2.Person.WORK:
  17. print " Work phone #: ",
  18. print phone_number.number
  19. # Main procedure: Reads the entire address book from a file and prints all
  20. # the information inside.
  21. if len(sys.argv) != 2:
  22. print "Usage:", sys.argv[0], "ADDRESS_BOOK_FILE"
  23. sys.exit(-1)
  24. address_book = addressbook_pb2.AddressBook()
  25. # Read the existing address book.
  26. f = open(sys.argv[1], "rb")
  27. address_book.ParseFromString(f.read())
  28. f.close()
  29. ListPeople(address_book)

发表评论

表情:
评论列表 (有 0 条评论,455人围观)

还没有评论,来说两句吧...

相关阅读

    相关 简介

    第一章:简介 (一)Redis介绍 Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可