| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #!/usr/bin/env python
- #encoding:utf-8
- import string
- import struct
- from google.protobuf import message as _message
- class Reader(object):
-
- def __init__(self, protobufClass, file):
- self.protobufClass = protobufClass
- self.file = file
- self.f = open(self.file, "rb")
- def __enter__(self):
- pass
- def __iter__(self):
- return self
-
- def next(self):
- header = self.f.read(4)
- if len(header) < 4:
- self.__exit__(None, None, None)
- raise StopIteration();
- length = struct.unpack('>i', header)
- bytes = self.f.read(length[0])
- protoObj = self.protobufClass()
- protoObj.ParseFromString(bytes)
- return protoObj
-
- def __next__(self):
- self.next()
-
- def __exit__(self, exc_type, exc_val, exc_tb):
- self.f.close()
- class Writer(object):
-
- def __init__(self, file):
- self.file = file
- self.f = open(self.file, "wb")
- def __enter__(self):
- pass
- def write(self, message):
- if isinstance(message, str):
- length = len(message)
- self.f.write(struct.pack(">i", length))
- self.f.write(message)
- return
- if isinstance(message, _message.Message):
- bytes = message.SerializeToString()
- length = len(bytes)
- self.f.write(struct.pack(">i", length))
- self.f.write(bytes)
- return
-
- def flush(self):
- self.f.flush()
-
- def __exit__(self, exc_type, exc_val, exc_tb):
- self.f.close()
- if __name__ == "__main__":
- pass
|