file字节输入流

IO流(输入流、输出流)

字节流、字符流

1.字节流

  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) 读取数据到字节数组buf从buf的start位置开始存放size长度的数据。

4.输出流基本方法

out.write(int b) 写出一个byte到流,b的低8位

out.write(byte[] buf) 将buf字节数组都写入都流

out.write(byte[] buf,int start,int size) 字节数组buf从start位置开始写size长度的字节到流

 

5.FileInputStream--->具体实现了在文件上读取数据

工具类,字节流的读操作

public class IOUtil { ​

import java.io.FileInputStream;
import java.io.IOException;
/**
 * 读取指定文件内容,按照16进制输出到控制台
 * 并且每输出10个byte换行
 * @param fileName
 * @throws IOException 
 */
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.print("0");
        }
        System.out.print(Integer.toHexString(b)+" "); //将整型b转换为16进制表示的字符串
        if(i++%10==0) {
            System.out.println();
        }
    }
    in.close();
    }
}
测试类

import java.io.IOException;
​
public class IOUtilTest1 {
    public static void main(String[] args) {
        try {
            IOUtil.printHex("E:\\Java\\eclipse-workspace\\20220312-day\\src\\edu\\uestc\\avatar\\ComputeArea.java");
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}

 

工具类二

public static void printHexByByteArray(String fileName) throws IOException {
        FileInputStream in = new FileInputStream(fileName);
        byte[] buf = new byte[8 * 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.println();
//          }
//      }
        int bytes = 0;
        int j = 1;
        while((bytes = in.read(buf,0,buf.length))!=-1) {
            for(int i = 0;i < bytes; i++) {
                System.out.println(Integer.toHexString(buf[i] & 0xff) + " "); //0xff byte类型为8位,int类型32位,为了避免数据转换错误,通过& 0xff 将高24位清零
                if(j++ %10 == 0) {
                    System.out.println();
                }
            }
        }
    }

 

测试类二

public class IOUtilTest2 {
    public static void main(String[] args) {
        try {
            IOUtil.printHexByByteArray("E:\\Java\\eclipse-workspace\\20220312-day\\src\\edu\\uestc\\avatar\\ComputeArea.java");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 


 
posted @ 2022-06-20 14:59  Resign~as  阅读(88)  评论(0)    收藏  举报