Advertisement
Guest User

Untitled

a guest
Jul 30th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.75 KB | None | 0 0
  1. import struct
  2.  
  3.  
  4. class ByteStream:
  5.  
  6.     def __init__(self):
  7.         self.reset()
  8.  
  9.     def reset(self):
  10.         self.buffer = bytearray(0)
  11.         self.position_read = 0
  12.         self.position_write = 0
  13.  
  14.     def load_from_file(self, filename):
  15.         try:
  16.             f = open(filename, 'rb')
  17.             self.buffer = bytearray(0)
  18.             while True:
  19.                 str = f.read(1024)
  20.                 self.buffer[len(self.buffer):len(self.buffer)] = str
  21.                 if len(str) != 1024:
  22.                     break
  23.             f.close()
  24.         except IOError:
  25.             return False
  26.         return True
  27.  
  28.     def save_to_file(self, filename):
  29.         try:
  30.             f = open(filename, 'wb')
  31.             wpos = 0
  32.             while wpos < len(self.buffer):
  33.                 f.write(self.buffer[wpos:wpos + 1024])
  34.                 wpos += 1024
  35.             f.close()
  36.         except IOError:
  37.             return False
  38.         return True
  39.  
  40.     def seek(self, pos):
  41.         if pos < 0:
  42.             pos = 0
  43.         if pos > len(self.buffer):
  44.             pos = len(self.buffer)
  45.         self.position_read = pos
  46.         self.position_write = pos
  47.  
  48.     def read(self, size):
  49.         if self.position_read + size > len(self.buffer):
  50.             size = len(self.buffer) - self.position_read
  51.         if size <= 0:
  52.             return bytearray(0)
  53.         buf = self.buffer[self.position_read:self.position_read + size]
  54.         self.position_read += size
  55.         return buf
  56.  
  57.     def write(self, buf):
  58.         self.buffer[self.position_write:self.position_write] = buf
  59.         self.position_write += len(buf)
  60.  
  61.     def read_int8(self):
  62.         buf = self.read(1)
  63.         if not buf:
  64.             return 0
  65.         try:
  66.             return struct.unpack('<b', buf)[0]
  67.         except:
  68.             return 0
  69.  
  70.     def read_uint8(self):
  71.         buf = self.read(1)
  72.         if not buf:
  73.             return 0
  74.         try:
  75.             return struct.unpack('<B', buf)[0]
  76.         except:
  77.             return 0
  78.  
  79.     def read_int16(self):
  80.         buf = self.read(2)
  81.         if len(buf) != 2:
  82.             return 0
  83.         try:
  84.             return struct.unpack('<h', buf)[0]
  85.         except:
  86.             return 0
  87.  
  88.     def read_uint16(self):
  89.         buf = self.read(2)
  90.         if len(buf) != 2:
  91.             return 0
  92.         try:
  93.             return struct.unpack('<H', buf)[0]
  94.         except:
  95.             return 0
  96.  
  97.     def read_int32(self):
  98.         buf = self.read(4)
  99.         if len(buf) != 4:
  100.             return 0
  101.         try:
  102.             return struct.unpack('<l', buf)[0]
  103.         except:
  104.             return 0
  105.  
  106.     def read_uint32(self):
  107.         buf = self.read(4)
  108.         if len(buf) != 4:
  109.             return 0
  110.         try:
  111.             return struct.unpack('<L', buf)[0]
  112.         except:
  113.             return 0
  114.  
  115.     def read_int64(self):
  116.         buf = self.read(8)
  117.         if len(buf) != 8:
  118.             return 0
  119.         try:
  120.             return struct.unpack('<q', buf)[0]
  121.         except:
  122.             return 0
  123.  
  124.     def read_uint64(self):
  125.         buf = self.read(8)
  126.         if len(buf) != 8:
  127.             return 0
  128.         try:
  129.             return struct.unpack('<Q', buf)[0]
  130.         except:
  131.             return 0
  132.  
  133.     def write_int8(self, int8):
  134.         self.write(struct.pack('<b', int8 & 0xFF))
  135.  
  136.     def write_uint8(self, uint8):
  137.         self.write(struct.pack('<B', uint8 & 0xFF))
  138.  
  139.     def write_int16(self, int16):
  140.         self.write(struct.pack('<h', int16 & 0xFFFF))
  141.  
  142.     def write_uint16(self, uint16):
  143.         self.write(struct.pack('<H', uint16 & 0xFFFF))
  144.  
  145.     def write_int32(self, int32):
  146.         self.write(struct.pack('<l', int32 & 0xFFFFFFFF))
  147.  
  148.     def write_uint32(self, uint32):
  149.         self.write(struct.pack('<L', uint32 & 0xFFFFFFFF))
  150.  
  151.     def write_int64(self, int64):
  152.         self.write(struct.pack('<q', int64 & 0xFFFFFFFFFFFFFFFF))
  153.  
  154.     def write_uint64(self, uint64):
  155.         self.write(struct.pack('<Q', uint64 & 0xFFFFFFFFFFFFFFFF))
  156.  
  157.     def read_fixed_string(self, size):
  158.         _str = bytearray(size)
  159.         for i in range(size):
  160.             _str[i] = self.read_uint8()
  161.         return _str.decode('utf-8')
  162.  
  163.     def write_fixed_string(self, string, size):
  164.         string = string.encode('utf-8')
  165.         _str = bytearray(size)
  166.         for i in range(size):
  167.             _str[i] = string[i]
  168.         self.write(_str)
  169.  
  170.     def read_string(self):
  171.         _str = bytearray()
  172.         while True:
  173.             c = self.read_uint8()
  174.             if c == 0:
  175.                 break
  176.             _str.append(c)
  177.         return _str.decode('utf-8')
  178.  
  179.     def write_string(self, string):
  180.         string = string.encode('utf-8')
  181.         for c in string:
  182.             self.write_uint8(c)
  183.         self.write_uint8(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement