summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY8
-rw-r--r--vdrnfofs/concatenated_file_reader.py11
2 files changed, 12 insertions, 7 deletions
diff --git a/HISTORY b/HISTORY
index 6ce6aa4..cd02a51 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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: