diff --git a/src/datafile.py b/src/datafile.py new file mode 100644 --- /dev/null +++ b/src/datafile.py @@ -0,0 +1,29 @@ +from hashtree import HashTree + + +BLOCK_SIZE=HashTree.BLOCK_SIZE + + +class DataFile: + def __init__(self,fileHandle): + self._lastIndex=0 + self._f=fileHandle + + @staticmethod + def open(filename,mode="rb"): + return DataFile(open(filename,mode=mode)) + + def writeAt(self,i,blockData): + if i!=self._lastIndex+1: + self._f.seek(i*BLOCK_SIZE) + self._f.write(blockData) + self._lastIndex=i + + def readFrom(self,i,byteCount=BLOCK_SIZE): + if i!=self._lastIndex+1: + self._f.seek(i*BLOCK_SIZE) + self._lastIndex=i + return self._f.read(byteCount) + + def close(self): + self._f.close()