• FileInputStream 原理总结 把文件作为字节流进行读操作


    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具体实现了在文件上读取数据

  • 相关阅读:
    升级MySQL5.7.22版本_总结记录
    初探分布式环境的指挥官ZooKeeper
    利用ROS工具从bag包中提取图片和.csv文件
    安装tensorflow出现的python-setuptools 20.7.0问题
    evo 评测工具修改背景颜色和线条等参数
    Ubuntu上下载百度网盘资料
    okvis 编译出现ceres-solver错误的解决办法
    opencv各个模块功能总结
    计算两幅图的单应矩阵,实现图像拼接
    特征提取与匹配、基础矩阵、单应矩阵、极限约束
  • 原文地址:https://www.cnblogs.com/xuedexin/p/5639329.html
Copyright © 2020-2023  润新知