1.1 --- a/iixr/files.py Wed Sep 16 21:02:35 2009 +0200
1.2 +++ b/iixr/files.py Wed Sep 16 21:12:17 2009 +0200
1.3 @@ -19,6 +19,7 @@
1.4 """
1.5
1.6 from iixr.data import vint
1.7 +from cStringIO import StringIO
1.8 import bz2, zlib
1.9
1.10 # Constants.
1.11 @@ -72,7 +73,7 @@
1.12
1.13 def __init__(self, f):
1.14 File.__init__(self, f)
1.15 - self.cache = []
1.16 + self.cache = StringIO()
1.17 self.cache_length = 0
1.18
1.19 def write_number(self, number):
1.20 @@ -118,18 +119,17 @@
1.21 # Cache-affected methods.
1.22
1.23 def write(self, s):
1.24 - self.cache.append(s)
1.25 - self.cache_length += len(s)
1.26 - if self.cache_length >= WRITE_CACHE_SIZE:
1.27 + self.cache.write(s)
1.28 + if self.cache.tell() >= WRITE_CACHE_SIZE:
1.29 self.flush()
1.30
1.31 def tell(self):
1.32 - return self.f.tell() + self.cache_length
1.33 + return self.f.tell() + self.cache.tell()
1.34
1.35 def flush(self):
1.36 - self.f.write("".join(self.cache))
1.37 - self.cache = []
1.38 - self.cache_length = 0
1.39 + self.cache.seek(0)
1.40 + self.f.write(self.cache.read())
1.41 + self.cache = StringIO()
1.42
1.43 class FileReader(File):
1.44