readbin.java

Download readbin.zip.

This program shows how to read a binary file produced by the Nios II objcopy utility. This example prints hex address and 32-bit word contents for the first few words. Note that Java assumes a little-endian order - and we need big-endian.


// readbin.java
import java.io.*;
import java.util.Scanner;

public class readbin
{
    private DataInputStream input;
    private int [] b;
    private int contents;
    public readbin() {
	b = new int[4];
    }
    
    public boolean open(String filename)
    {
	try {
	    input = new DataInputStream(
		new BufferedInputStream(
		new FileInputStream(filename)));
	    return true;
	}
	catch (FileNotFoundException e) {
	    System.err.println("Error opening file: " + filename);
	    return false;
	}
    }
    public void close()
    {
	try {
	    if (input!=null) input.close();
	}
	catch (IOException exception)
	{
	}
    }
    public int getInt() { return contents; }
    public boolean hasNext()
    {
	try {
	    // Java is exclusively little-endian, we need big-endian!
	    for (int i=0; i<4; i++) b[i] = (input.readByte() & 0xff);
	}
	catch (EOFException exception)
	{
	    return false;
	}
	catch (IOException ioexception)
	{
	    System.err.println("Error during read from file");
	    return false;
	}
	contents = (b[3]<<24)|(b[2]<<16)|(b[1]<<8)|b[0];
	return true;
    }
	
    public static void main(String args[])
    {
	String filename;
	Scanner cin = new Scanner(System.in);
	if (args.length>0) filename = args[0];
	else {
	    System.out.print("Enter file name: ");
	    filename = cin.nextLine();
	}
	int offset = 0;
	if (args.length>1) offset = (int) Long.parseLong(args[1],16);

	// create readbin object based on user input
	readbin bin = new readbin();
	if (!bin.open(filename)) return;
	int address=0;
	int contents;
	while (bin.hasNext()) {
	    if (address<offset) {
		address += 4;
		continue;
	    }
	    contents = bin.getInt();
	    System.out.printf("%08x : %08x\n",address,contents);
	    address += 4;
	    // debug: shorten output file
	    if (address-offset>64) break;
	}
	bin.close();
    }
}


Results




Maintained by John Loomis, updated Sun Feb 04 21:32:54 2007