/**
* Created by LiuHuiChao on 2016/3/9.
*/
public class IOUtil {
/*
读取指定文件内容,按照十六进制输出
并且每输出10个byte,换行
注意:单字节读取不适合大文件,大文件效率很低
*/
public static void printHex(String fileName) throws IOException {
//把文件作为字节流读操作
FileInputStream in=new FileInputStream(fileName);
int b;
int i=1;
while ((b=in.read())!=-1){
if(b<0xf){
//单位数前面补0
System.out.println("0");
}
System.out.print(Integer.toHexString(b)+" ");//强整形b转化为16进制表示的字符串
if(i++%10==0){
System.out.println();
}
}
in.close();
}
/*
批量字节读取,对大文件而言,效率高,也是最常用的
*/
public static void printHexByByteArray(String fileName) throws FileNotFoundException,IOException {
FileInputStream in=new FileInputStream(fileName);
byte[] buf=new byte[20*1024];
/*从in中批量读取字节,放入到buf这个字节数组中,从第0个位置开始放,
* 最多放buf.length个,返回的是读到的字节的个数
* 一次性读完,说明字节数组足够大
* */
/* int bytes=in.read(buf,0,buf.length);
int j=1;
for(int i=0;i<bytes;i++){
if(buf[i]<=0xf){
System.out.print("0");
}
System.out.print(Integer.toHexString(buf[i])+" ");
if(j++%10==0){
System.out.print("");
}*/
int bytes=0;
int j=1;
while ((bytes=in.read(buf,0,buf.length))!=-1) {
for(int i=0;i<bytes;i++) {
System.out.print(Integer.toHexString(buf[i] &0xff) +" ");
if (j++%10==0) { //处理换行
System.out.println();
}
}
}
in.close();
}
}
/**
* Created by LiuHuiChao on 2016/3/9.
*/
/*
* Io流(输入流,输出流)
* 字节流,字符流
* 1,字节流
* inputstream,outputstream
* inputstream抽象了应用程序读取数据的方式
* outputstream抽象了应用程序写出数据的方式
*
* 2,EOF=end 或者读到-1就读到结尾
* 3,输入流基本方法
* int b=in.read();读取一个字节,无法好填充到int低8位;-1是EOF
* in.read(byte[] buf)读取数据填充到字节数组buf
* in.read(byte[] buf,int start,int size)
* 4,输出流基本方法
* out.write(int b)写出一个byte到流,b的低8位
* out.write(byte[] buf)将buf字节数组都写入到流
* out.write(byte[] buf,int start,int size)
*
* 5,FileInputStream-->InputStream:具体实现了在文件上读取数
*
* */
public class FileStreamTest {
public static void main(String[] args) throws IOException {
// IOUtil.printHex("H:\\Lhc\\diary.txt");
long start=System.currentTimeMillis();
IOUtil.printHexByByteArray("C:\\Users\\LiuHuiChao\\Desktop\\6358290-1.flv");
System.out.println();
long end=System.currentTimeMillis();
System.out.print(end-start);
}
}