diff options
author | etobi <git@e-tobi.net> | 2011-10-03 22:45:11 +0200 |
---|---|---|
committer | etobi <git@e-tobi.net> | 2011-10-04 08:09:45 +0200 |
commit | 2341a0fd8342dd2b352a57da45c4f03e72a89e9d (patch) | |
tree | 712d2212bb4e38840306f7af62c5631c06f59364 | |
parent | 6b19d2ce6a3c4e0aab38cd9624e8bcfed84b992e (diff) | |
download | vdrnfofs-2341a0fd8342dd2b352a57da45c4f03e72a89e9d.tar.gz vdrnfofs-2341a0fd8342dd2b352a57da45c4f03e72a89e9d.tar.bz2 |
Use cStringIO instead of string concatenation - about 3 times faster
-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: |