Reading into a Large Buffer through FileChannel : FileInputStream « File « Java Tutorial






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();
  }
}








11.8.FileInputStream
11.8.1.FileInputStream
11.8.2.Create FileInputStream and read, display data
11.8.3.Getting FileChannel from FileInputStream
11.8.4.Creating File Input Streams from file name
11.8.5.Creating FileInputStream from File object
11.8.6.Using a FileDescriptor from getFD() and creating a FileInputStream from FileDescriptor
11.8.7.Constructing FileInputStream to read from a Text File
11.8.8.Skip n bytes while reading the file using FileInputStream
11.8.9.Copy a file with read(byte[] data) and write(byte[] data)
11.8.10.Reading a Binary File
11.8.11.Reading Mixed Data from a File
11.8.12.Read one byte from a file
11.8.13.Read file character by character
11.8.14.Reading a File into a Byte Array: reads the entire contents of a file into a byte array
11.8.15.Read bytes and display their hexadecimal values.
11.8.16.Reading UTF-8 Encoded Data
11.8.17.Reading into a Large Buffer through FileChannel
11.8.18.Display file contents in hexadecimal