diff --git a/buffer.py b/buffer.py index fe49f98f83e7bf589de1c4c3bbfbdbf62a903ebd..5dca9f8115fbfab193a1c3389da510af7fdf6d72 100644 --- a/buffer.py +++ b/buffer.py @@ -13,10 +13,11 @@ class FileBuffer: f = open(filename, "rb") segments = [] while 1: - data = f.read(DATA_SIZE) + data = f.read(DATA_SIZE-1) if not data: break - segments.append(Segment(data=data)) + seg = Segment(data=data) + segments.append(seg) return segments def write(self, segments:List[Segment], filename): @@ -24,5 +25,17 @@ class FileBuffer: # write array of segment to file with open(filename, 'wb') as f: for seg in segments: - f.write(seg.get_data) + data = seg.get_data() + f.write(data) return + +if __name__=="__main__": + fb = FileBuffer() + segments = fb.read("data/test") + + print(len(segments)) + + fb.write(segments, "data/out") + + buff = [10, 90, 99] + byte = bytes(buff) diff --git a/halo.txt b/data/halo.txt similarity index 100% rename from halo.txt rename to data/halo.txt diff --git a/data/out b/data/out new file mode 100644 index 0000000000000000000000000000000000000000..ceb97186c1b508b4ff1feb14b290b53080449d86 Binary files /dev/null and b/data/out differ diff --git a/data/test b/data/test new file mode 100644 index 0000000000000000000000000000000000000000..ceb97186c1b508b4ff1feb14b290b53080449d86 Binary files /dev/null and b/data/test differ diff --git a/segment.py b/segment.py index 335c7f06b33c383b17215d9ccdee797e8f0e4f88..b1ca7fcb5732cd94881d70b713926cce036ce837 100644 --- a/segment.py +++ b/segment.py @@ -3,14 +3,15 @@ import os # constant SEG_SIZE = 32782 -DATA_SIZE = SEG_SIZE - 12 +HEADER_SIZE = 12 +DATA_SIZE = SEG_SIZE - HEADER_SIZE class Segment(): def __init__(self, seq_no=0, ack_no=0, data=bytes(), checksum=0): self.DATA_PTR = 12 - self.bytes = [0 for _ in range(SEG_SIZE)] + self.bytes = [0 for _ in range(HEADER_SIZE)] self.set_seq_no(seq_no) self.set_ack_no(ack_no) self.set_data(data) @@ -42,14 +43,17 @@ class Segment(): def set_data(self, data): ptr = self.DATA_PTR - for byte in data: - self.bytes[ptr] = byte - ptr += 1 + bound = len(data) + if bound > DATA_SIZE: + bound = DATA_SIZE + for i in range(bound): + self.bytes.append(data[i]) + def get_data(self): data=[] ptr = self.DATA_PTR # pointer to data in segment - while self.bytes[ptr] != 0: + for b in self.bytes[HEADER_SIZE:]: data.append(self.bytes[ptr]) ptr += 1 return bytes(data)