Java IO——FileInputStream



/**
 * 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);


    }
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值