From 3c4a553a245d736622a5ae584e6ddbb0e73b15ff Mon Sep 17 00:00:00 2001 From: Steve Slaven Date: Mon, 2 Nov 2009 17:03:36 -0800 Subject: Use a cStringBuffer for IO which appears to be faster than using join() for very large lists diff --git a/FuseArchive/ChunkBuffer.py b/FuseArchive/ChunkBuffer.py index 134ce30..8bf3261 100644 --- a/FuseArchive/ChunkBuffer.py +++ b/FuseArchive/ChunkBuffer.py @@ -1,7 +1,8 @@ from ChunkBufferMem import ChunkBufferMem from ChunkBufferFile import ChunkBufferFile +from ChunkBufferStringIO import ChunkBufferStringIO # Handle efficient operations on a non-fixed length buffer like appending, # replacing, reading chunks, etc -class ChunkBuffer(ChunkBufferMem): +class ChunkBuffer(ChunkBufferStringIO): pass diff --git a/FuseArchive/ChunkBufferStringIO.py b/FuseArchive/ChunkBufferStringIO.py new file mode 100644 index 0000000..9a27f51 --- /dev/null +++ b/FuseArchive/ChunkBufferStringIO.py @@ -0,0 +1,30 @@ +import logging +from cStringIO import StringIO + +# Handle efficient operations on a non-fixed length buffer like appending, +# replacing, reading chunks, etc +class ChunkBufferStringIO: + def __init__( self, data = '' ): + logging.debug( "Creating chunkbuffer: %s" % data ) + self.io = StringIO(); + self.len = 0 + self.append( data ) + + def append( self, s ): + self.len += len( s ) + self.io.write( s ) + + def replace( self, buf, start, end ): + self.io.seek( start ) + self.io.write( buf[ end - start: ] ) + self.io.seek( 0, os.SEEK_END ) + + def length( self ): + return self.len + + def truncate( self, l ): + self.len = l + self.io.truncate( l ) + + def string(self): + return self.io.getvalue() -- cgit v0.10.2