1. 程式人生 > >cStringIO 實現指定大小的字符串緩存

cStringIO 實現指定大小的字符串緩存

繼承 大小 pan get readline 裁剪 實現 mst ffd

StringIO經常被用來作為字符串的緩存,以下實現無論寫入多少字符串,總能返回一個指定大小的緩存

from cStringIO import StringIO

class CustomStringIO():

    def __init__(self, max_buffer = 4096):
      
        self.max_buffer = max_buffer #用來設置stringIO最大存儲字節數
        self.buffer = StringIO() #cStringIO.StringIO 不能用於繼承,一旦賦值初始化了,就不能改變,但其效率比StringIO.StringIO高,cStringIO沒有len和pos屬性。(還有,cStringIO不支持Unicode編碼)

    def truncate_to_maxsize(self):
        ‘‘‘自定義裁剪函數,當StringIO存儲字節數超過定義的最大字節數時,裁剪最後寫入的最大長度
        self.buffer.seek(-self.max_buffer, 2)
        _last = self.buffer.readlines()
        self.buffer.truncate(0)
        self.buffer.writelines(_last)

    def write(self,string):
        self.buffer.write(string)
        self.truncate_to_maxsize()

    def getvalue(self):
        return self.buffer.getvalue()

if __name__ == ‘__main__‘:
    mystringio=CustomStringIO(10)
    mystringio.write(‘lyhlyh‘)
    mystringio.write(‘ldfdffdfdsfdsfsdfs‘)
    mystringio.write(‘fdfdfdfdf‘)
    print mystringio.getvalue()

cStringIO 實現指定大小的字符串緩存