text_data_stream.py 781 B

123456789101112131415161718192021222324252627282930313233343536
  1. import struct
  2. from .text_data_pb2 import TextData
  3. def read_pb_stream(f):
  4. while True:
  5. buf = f.read(4)
  6. if len(buf) == 0:
  7. break
  8. size = struct.unpack("I", buf)[0]
  9. buf = f.read(size)
  10. text_data = TextData()
  11. text_data.ParseFromString(buf)
  12. yield text_data
  13. def write_pb_stream(f, text_data):
  14. buf = text_data.SerializeToString()
  15. f.write(struct.pack("I", len(buf)))
  16. f.write(buf)
  17. def pack_pb_stream(text_data):
  18. buf = text_data.SerializeToString()
  19. return struct.pack("I", len(buf)) + buf
  20. def split_pb_stream(f):
  21. while True:
  22. head = f.read(4)
  23. if len(head) == 0:
  24. break
  25. size = struct.unpack("I", head)[0]
  26. buf = f.read(size)
  27. yield head + buf