import java.io.File; 
import java.io.FileInputStream; 
import java.nio.ByteBuffer; 
import java.nio.channels.FileChannel; 
 
public class Main { 
  public static void main(String[] args) 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();  } 
 
} 
 
    
     
     
  
  |