diff options
-rw-r--r-- | HISTORY | 8 | ||||
-rw-r--r-- | vdrnfofs/concatenated_file_reader.py | 11 |
2 files changed, 12 insertions, 7 deletions
@@ -1,9 +1,13 @@ -version 0.0.7 +version 0.8 + - Use cStringIO instead of string concatenation - about 3 times faster + (Patch provided by Ed Hein) + +version 0.7 - Fixed file/dir node permissions - Added README - BSD Licence - Added TODO and HISTORY - Enable "./setup.py test" for running the tests -version 0.0.6 +version 0.6 - inital release diff --git a/vdrnfofs/concatenated_file_reader.py b/vdrnfofs/concatenated_file_reader.py index 9f05ebd..9ba8d3a 100644 --- a/vdrnfofs/concatenated_file_reader.py +++ b/vdrnfofs/concatenated_file_reader.py @@ -20,6 +20,7 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import os +from cStringIO import StringIO class ConcatenatedFileReader: def __init__(self, filenames): @@ -28,9 +29,9 @@ class ConcatenatedFileReader: self.current_file = None def read(self, offset, size): - buffer = "" + buffer = StringIO() ptr = offset - while (len(buffer) < size): + while (buffer.tell() < size): (filename, file_offset) = self.filename_from_offset(ptr) if filename: if (self.current_filename != filename): @@ -39,11 +40,11 @@ class ConcatenatedFileReader: self.current_filename = filename self.current_file = open(filename, 'r') self.current_file.seek(file_offset) - buffer += self.current_file.read(size - len(buffer)) - ptr = offset + len(buffer) + buffer.write(self.current_file.read(size - buffer.tell())) + ptr = offset + buffer.tell() else: break - return buffer + return buffer.getvalue() def release(self): if self.current_file: |