Java: Javolution: How to use UTF8ByteBufferWriter and MappedByteBuffer?
To Anybody that uses the javolution, please guide me on how to use it. Any snippet code helps me a lot.
here's my current code:
public static void mergeAllFilesJavolution2()throws FileNotFoundException, IOException {
String fileDir = "C:\\TestData\\w12";
File dirSrc = new File(fileDir);
File[] list = dirSrc.listFiles();
long start = System.currentTimeMillis();
String outFile = fileDir + "\\..\\merged.txt";
File file2 = new File(outFile);
//file2.createNewFile();
FileChannel fc2 = (new RandomAccessFile(file2, "rw")).getChannel();
for(int j=0; j<list.length; j++){
int chr;
String srcFile = list[j].getPath();
File file = new File(srcFile);
FileChannel fc = (new FileInputStream(file)).getChannel();
MappedByteBuffer buf = fc.map(MapMode.READ_ONLY, 0, file.length());
UTF8ByteBufferReader inFile= new UTF8ByteBufferReader().setInput(buf);
MappedByteBuffer buf2 = fc2.map(MapMode.READ_WRITE, file2.length(), file.length());
UTF8ByteBufferWriter outPut= new UTF8ByteBufferWriter().setOutput(buf2);
while((chr=inFile.read()) != -1) {
outPut.write(chr);
}
outPut.close();
inFi开发者_开发百科le.close();
}
System.out.println(System.currentTimeMillis()-start);
}
but it gives me an exception:
Exception in thread "main" java.nio.channels.NonReadableChannelException at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:716) at abc.filedivision.FileMergeTest.mergeAllFilesJavolution2(FileMergeTest.java:100) at abc.filedivision.FileMergeTest.main(FileMergeTest.java:27)
Any guidance on the right direction is appreciated.
My guess is it is complaining here (thats why its important to look at the line of code which has the error)
FileChannel fc2 = (new FileOutputStream(file2, true)).getChannel();
MappedByteBuffer buf2 = fc2.map(MapMode.READ_WRITE, 0, file2.length());
This exception is thrown if you are trying to use the channel to read but it is not readable.
You can only open a channel in READ_WRITE mode if you use RandomAccessFile in "rw", "rws", or "rwd" modes
精彩评论