Переписал и значительно упростил решение, избавился от лишних словарей и списков. Однако он не пропускает, говоря, что нужно использовать буфер при чтении и записи. Но я читаю в буфер в несколько потоков (для каждого свой) и даже пишу в файл из одного буфера, склеенного из из буферов потоков, кроме того я использую BufferedInputStream и BufferedOutputStream. Вообще по собственным ощущениям код выглядит чистым, надёжным, лаконичным и простым. Но чего он от меня добивается? Это становится просто подозрительным.