JAVA_IO_DataOutputStream与DataInputStream(五)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/84307704

在IO包中提供了两个与平台无关的数据操作流

2), DataOutputStream 数据输出流

  •  DataInputStream 该类继承自 FilterOutputStream
    
  • 数据输出流使应用程序以便携式方式将原始Java数据类型写入输出流。 然后应用程序可以使用数据输入流来读取数据。

常用方法
writeUTF(String str)  使用 modified UTF-8编码以机器无关的方式将字符串写入基础输出流。 
writeInt(int v)  将底层输出流写入 int作为四字节,高位字节。 
writxxx 可以写入各种类型数据。

使用如下

    public static void main(String[] args) throws IOException {
        write("C:/Users/xiao/Desktop/a.txt");
        
    }   


 public static void write(String descpath) throws IOException {
        int a = 1;
        Long b = 10L;
        double c = 3.14;
        boolean d = true;
        String str = "张三向你问好";

        DataOutputStream stream = new DataOutputStream(
            //创建一个内部缓冲区数组
            new BufferedOutputStream(
                //从文件系统中的文件获取输入字节
                new FileOutputStream(
                    new File(descpath)
                )
            )
        );

        //注意顺序 保存这些数据
        stream.writeInt(a);
        stream.writeLong(b);
        stream.writeDouble(c);
        stream.writeBoolean(d);
        stream.writeUTF(str);

        //释放资源
        stream.flush();
        stream.close();
    }

 

运行结果如下(这些并没有乱码,是机器看的)

 

 

 

2) , DataInputStream 数据输入流

  • DataInputStream 该类继承自 FilterInputStream 
  • 数据输入流允许应用程序以独立于机器的方式从底层输入流读取原始Java数据类型。 应用程序使用数据输出流来写入稍后可以被数据输入流读取的数据。

  • DataInputStream对于多线程访问来说不一定是安全的。

我们来使用 DataInputStream 来获取刚才的数据

    public static void main(String[] args) throws IOException {
        reder("C:/Users/xiao/Desktop/a.txt");
    }  

  public static void reder(String src) throws IOException {

        DataInputStream inputStream = new DataInputStream(
            new BufferedInputStream(
                new FileInputStream(
                    new File(src)
                )
            )
        );
        //注意读取的顺序 
        int i = inputStream.readInt();
        long l = inputStream.readLong();
        double v = inputStream.readDouble();
        boolean b = inputStream.readBoolean();
        String str = inputStream.readUTF();
        //控制台打印
        System.out.println("int:" + i + "\n" +
            "long:" + l + "\n" +
            "double:" + v + "\n" +
            "boolean:" + b + "\n" +
            "String:" + str);
        //释放资源
        inputStream.close();
    }

控制台输出结果是

总结:

1) ,如果把 a.txt 替换为 c.txt 然后接着读取c.txt文件  会出现以下问题

执行结果

EOFException

  • EOFException 该类继承自 IoException
  • 表示在输入过程中意外地到达文件结束或流结束。

  • 这个异常主要由数据输入流用来表示流的结尾。 请注意,许多其他输入操作在流的末尾返回特殊值,而不是抛出异常。

DataOutput接口和DataInput接口。两个数据操作流的方法都是继承两个接口的方法,这两个接口的操作,彼此对应,相依赖

2),  如果写入的顺序和读取的顺序不一致,有可能出现数据的混乱 如下

我更改读取顺序 

输出结果 

把读取顺序改回来 控制台 数据也正确

猜你喜欢

转载自blog.csdn.net/qq_40646143/article/details/84307704
今日推荐