public static MMapBuffer cacheByteFieldToFile(UnsortedIntTermDocIterator iterator, int numDocs, File file) throws IOException {
final int[] docIdBuf = new int[BUFFER_SIZE];
final MMapBuffer buffer = new MMapBuffer(file, 0L, numDocs, FileChannel.MapMode.READ_WRITE, ByteOrder.LITTLE_ENDIAN);
final ByteArray byteArray = buffer.memory().byteArray(0, numDocs);
try {
while (iterator.nextTerm()) {
final byte term = (byte)iterator.term();
while (true) {
final int n = iterator.nextDocs(docIdBuf);
for (int i = 0; i < n; ++i) {
byteArray.set(docIdBuf[i], term);
}
if (n < docIdBuf.length) {
break;
}
}
}
buffer.sync(0, numDocs);
} catch (RuntimeException e) {
Closeables2.closeQuietly(buffer, LOG);
throw e;
} catch (IOException e) {
Closeables2.closeQuietly(buffer, LOG);
throw e;
}
return buffer;
}