擅长:python、mysql、java
<p>从映射文件开始:</p>
<pre><code>import mmap, os, re
f = open(filename)
m = mmap.mmap(f.fileno(), os.fstat(f.fileno()).st_size, prot=mmap.PROT_READ)
</code></pre>
<p>使用正则表达式很方便:</p>
<pre><code>for match in re.findall(b'\0{32768}, m):
print(match.start())
</code></pre>
<p>但弦的速度更快:</p>
<pre><code>z32k = '\0' * 32768
start = 0
while True:
start = m.find(z32k, start)
if start < 0:
break
print(start)
</code></pre>
<p>仅32k对齐块:</p>
<pre><code>for match in re.finditer('.{32768}', m, re.DOTALL):
if max(match.group()) == '\0':
print(match.start())
</code></pre>