Mega Code Archive

 
Categories / Java Tutorial / File
 

Reading into a Large Buffer through FileChannel

import java.io.File; import java.io.FileInputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class MainClass {   public static void main(String[] args) {     try {       test();     } catch (Exception e) {       e.printStackTrace();     }   }   private static void test() throws Exception {     File aFile = new File("primes.txt");     FileInputStream inFile = new FileInputStream(aFile);     FileChannel inChannel = inFile.getChannel();     ByteBuffer buf = ByteBuffer.allocateDirect(1024);     buf.position(buf.limit());     while (true) {       if (buf.remaining() < 8) {         if (inChannel.read(buf.compact()) == -1){           break;         }         buf.flip();       }       int strLength = (int) buf.getDouble();       if (buf.remaining() < 2 * strLength) {         if (inChannel.read(buf.compact()) == -1){           break;         }         buf.flip();       }       byte[] strChars = new byte[2 * strLength];       buf.get(strChars);       if (buf.remaining() < 8) {         if (inChannel.read(buf.compact()) == -1){           break;         }         buf.flip();       }       System.out.println(strLength);       System.out.println(ByteBuffer.wrap(strChars).asCharBuffer());       System.out.println(buf.getLong());     }     inFile.close();   } }