public static MMapBuffer cacheCharFieldToFile(UnsortedIntTermDocIterator iterator, int numDocs, File file) throws IOException {
final int[] docIdBuf = new int[BUFFER_SIZE];
final int length = numDocs * 2;
final MMapBuffer buffer = new MMapBuffer(file, 0L, length, FileChannel.MapMode.READ_WRITE, ByteOrder.LITTLE_ENDIAN);
final CharArray charArray = buffer.memory().charArray(0, numDocs);
try {
while (iterator.nextTerm()) {
final char term = (char)iterator.term();
while (true) {
final int n = iterator.nextDocs(docIdBuf);
for (int i = 0; i < n; ++i) {
charArray.set(docIdBuf[i], 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;
}