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