O'Reilly logo

Ivor Horton's Beginning Java™ 2, JDK™ 5th Edition by Ivor Horton

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

11.4. Reading Binary Data

When you read binary data, you still read bytes from the file, so the process is essentially the same as you used in the previous example. To read a binary file, you create a FileInputStream object and get the FileChannel object from it, and then you read the data into a byte buffer. You could set up a file channel to read the primes.bin file that you created in the previous chapter, like this:

File aFile = new File("C:/Beg Java Stuff/primes.bin");
FileInputStream inFile = null;
try {

  inFile = new FileInputStream(aFile);

} catch(FileNotFoundException e) {
  e.printStackTrace(System.err);
  System.exit(1);
}
FileChannel inChannel = inFile.getChannel();

You have some options for the size of the byte buffer. The number of bytes in the buffer should be a multiple of 8 because a prime value is of type long, but other than that you can make it whatever size you like. You could allocate a buffer to accommodate the number of primes that you want to output to the command line—six values, say. This would make accessing the data very easy since you need to set up a view buffer of type LongBuffer only each time you read from the file. One thing against this is that reading such a small amount of data from the file in each read operation would not be a very efficient way to read the file. Before data transfer can start for a read operation, you have significant delay, usually of the order of several milliseconds, waiting for the disk to rotate until the data that you ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required