java之FileInputStream/FileOutputStream输入输出int数据

FileInputStream/FileOutputStream输入输出int数据

因为这两个节点流,在进行对文件的输入和输出时,是以byte为单位进行数据的操作,char,byte,String三种数据的输入输出操作,可以简短代码的编写
而对于其他多个字节的数据操作,是比较复杂的,需要将数据提取出单个字节,在进行输入输出.

下面是以对int类型的数据输入输出举例,方便理解为什么使用Data流(缩写),而不使用File流.

import java.io.*;
public class TestWhyUseDate {
    /*为什么使用过滤流?Date*/
   public static void main(String[] args) {
        InputStream fis=null;
        OutputStream fos=null;
        try{
            fis=new FileInputStream("Test01");
            fos=new FileOutputStream("Test01");
            byte[] bytes=new byte[4];
            int num=1234567890;
            //int是4个字节,存放入 byte数组
            for (int i = 0; i <4; i++) {
                bytes[i]=(byte)num;
                //将int强转为byte,这样byte只会获取低位的1个字节,8位二进制
                fos.write(bytes[i]);
                //写入文件
                num=num>>8;//对原数据进行右移8位,获得第二个字节
            }
            int len=0,i=0,add=0;
            int left=8;
            //设置左移二进制位数
            int[] num2=new int[4];
            //定义长度4的int数组
            while ((len=fis.read())!=-1){
                num2[i]=len;
                //将每次读取的1字节放入数组
                i++;
            }
            add=num2[0];
            //低位的1字节,没有右移操作,直接赋给add,用于累加
            for (int j = 1; j <4; j++) {
                add+=num2[j]<<left;
                left+=8;
                //第一次右移8位,左移8位返回
                //第一次右移8位,左移16位返回
                //第一次右移8位,左移24位返回
            }
            System.out.println(add);
            //打印和,比对是否一致
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try{
                if (fos!=null){
                    fos.close();
                }
                if (fis!=null){
                    fis.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}

在这里插入图片描述
显而易见,我们成功地读取了文件中的int数据
在File流操作多个字节的输入输出,是较为繁琐的,而Data流内提供了对于各种基本数据类型的方法,而不需要进行右移左移操作,十分方便,是对节点流的加强;

你可能感兴趣的:(java)