package io; import java.io.FileInputStream; import java.io.IOException; public class IOUtil { /** * 读取指定文件内容,按照16进制输出到控制台,为什么要按十六进制? * 并且每输出10个byte换行 * @throws IOException */ public static void printHex(String filename) throws IOException{ //把文件作为字节流进行读操作 FileInputStream in = new FileInputStream(filename);//FileInputStream具体实现了在文件上读取数据 int b; int i=1; while((b=in.read())!=-1)//b=in.read()这就是程序核心 { System.out.println(Integer.toHexString(b)+" ");//将整型b转换成16进制表示的字符串?输出 if(i++%10==0) { System.out.println();//每隔十个字节换行 } } in.close(); } }
思想就是:利用new FileInputStream(filename)把一个文件放入到一个输入流对象in中,调用in.read()方法来逐个字节读取(下面read源码),读取输入流一个字节的数据,返回一个整型int(那么是不是十六进制的整型呢?)。
再调用Integer.toHexString(b)方法将存在b的为int的一个字节的数据转换成一个字符串,然后输出。
总体原理就是,将一篇字符串 放入流进行单个字节的整型读取,然后再转换回字符串单个输出。
/** * Reads a byte of data from this input stream. This method blocks * if no input is yet available. * * @return the next byte of data, or <code>-1</code> if the end of the * file is reached. * @exception IOException if an I/O error occurs. */ public int read() throws IOException { return read0(); } private native int read0() throws IOException;
//把文件作为字节流进行读操作
FileInputStream in = new FileInputStream(filename);//FileInputStream具体实现了在文件上读取数据
时间: 2024-12-26 00:06:56