django 读数据

 
 
class LimitedStream ( object ):
     '''
LimitedStream wraps another stream in order to not allow reading from it 不允许读
past specified amount of bytes.
'''
     def __init__ ( self , stream , limit , buf_size = 64 * 1024 * 1024 ):
         self . stream = stream
         self . remaining = limit
         self . buffer = b ''
         self . buf_size = buf_size

     def _read_limited ( self , size = None ):
         if size is None or size > self . remaining :
             size = self . remaining
         if size == 0 :
             return b ''
         result = self . stream . read ( size )
         self . remaining -= len ( result )
         return result

     def read ( self , size = None ):
         if size is None :
             result = self . buffer + self . _read_limited ()
             self . buffer = b ''

         elif size < len ( self . buffer ):
             result = self . buffer [: size ]
             self . buffer = self . buffer [ size :]

         else : # size >= len(self.buffer) 只能读一部分
             result = self . buffer + self . _read_limited ( size - len ( self . buffer ))
             self . buffer = b ''
         return result

     def readline ( self , size = None ):
         while b ' \n ' not in self . buffer and \
               ( size is None or len ( self . buffer ) < size ):
             # 直到读到 \n 为止
             if size :
                 # since size is not None here, len(self.buffer) < size
                 chunk = self . _read_limited ( size - len ( self . buffer ))
             else :
                 chunk = self . _read_limited ()

             if not chunk :
                 break

             self . buffer += chunk

         sio = BytesIO ( self . buffer )
         if size :
             line = sio . readline ( size )
         else :
             line = sio . readline ()

         self . buffer = sio . read () # 把剩下的数据放入 buffer
         return line
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值