DataInputStream 和 DataOutputStream流

1. 简介

DataInputStream 和 DataOutputStream流是基于 InputStream流 和 OutputStream流衍生出的子类,当然他们还基于父类DataInput 和 DataOutput。它们是针对Java基本数据类型读取/写入操作的。这两个类读写的文件都是针对机器的,DataOutputStream写出去的数据不是给人看的是给机器看的。而DataInputStream只能读取DataOutputStream写出去的文件。

  1. 使用DataOutputStream流写入txt文件时写入的是一堆乱码值。

  2. DataInputStream流只能读取DataOutputStream流写入的txt文件。读取正常的txt文件里的值反而读到的和实际的值有偏差



2. DataInputStream流

1.构造方法
//创建使用指定的底层InputStream的DataInputStream。
public DataInputStream(InputStream in) {
    super(in);
}

套用缓冲流 + 字节输入流
DataInputStream dis = new DataInputStream(
                    new BufferedInputStream(
                        new FileInputStream("path路径")
                    ));


直接套用 字节流
DataInputStream dis = new DataInputStream(new FileInputStream("path路径"));

2. 常用的方法
1. 三种常用的read()字节方法。

2. boolean readBoolean()从包含的输入流中读取的 boolean 值的字节

3. byte readByte() 此输入流的下一个字节,以有符号 8 位 bit 的形式表示。

4. char readChar()此输入流的下两个字节,将它们解释为一个 char

5. double readDouble()此输入流的下八个字节,将它们解释为一个 double6. float readFloat()此输入流的下四个字节,将它们解释为一个 float7. void readFully(byte[] b, int off, int len)  b - 存储读取数据的缓冲区。off - 数据的起始偏移量。len - 要读取的字节数。

8. int readInt() 此输入流的下四个字节,将它们解释为一个 int9. String readUTF() 使用modified UTF-8编码以机器无关的方式将字符串读取


3. DataOutputStream流

1. 构造方法
//创建使用指定的底层InputStream的DataInputStream。
public DataOutputStream(OutputStream out) {
    super(out);
}

套用缓冲流 + 字节输入流
DataOutputStream dis = new DataOutputStream(
                    new BufferedOutputStream(
                        new FileOutputStream("path路径")
                    ));


直接套用 字节流
DataOutputStream dis = new DataOutputStream(new FileOutputStream("path路径"));

2. 常用方法
	1.void flush() 刷新此数据输出流。  
    
    2. int size() 返回计数器的当前值 written ,到目前为止写入此数据输出流的字节数。  
    
    3.void write(byte[] b, int off, int len) 写入 len从指定的字节数组起始于偏移 off基础输出流。  
    
    4.void write(int b) 将指定的字节(参数 b的低8位)写入底层输出流。  
    
    5.void writeBoolean(boolean v)boolean写入底层输出流作为1字节值。  
    
    6.void writeByte(int v)byte作为1字节值写入底层输出流。  
    
    7.void writeBytes(String s) 将字符串作为字节序列写入基础输出流。  
    
    8. void writeChar(int v)char写入底层输出流作为2字节值,高字节优先。  
    
    9.void writeChars(String s) 将字符串写入底层输出流作为一系列字符。  
    
    10.void writeDouble(double v) 双参数传递给转换 long使用 doubleToLongBits方法在类 Double ,然后写入该 long值基础输出流作为8字节的数量,高字节。  
    
    11. void writeFloat(float v) 浮子参数的转换 int使用 floatToIntBits方法在类 Float ,然后写入该 int值基础输出流作为一个4字节的数量,高字节。  
    
    12.void writeInt(int v) 将底层输出流写入 int作为四字节,高位字节。  
    
    13.void writeLong(long v)long写入底层输出流,为8字节,高字节为首。  
    
    14.void writeShort(int v)short写入底层输出流作为两个字节,高字节优先。  
    
    15. void writeUTF(String str) 使用 modified UTF-8编码以机器无关的方式将字符串写入基础输出流。  


4. 配合使用

import java.io.*;

public class Demo01 {
    public static void main(String[] args) {
        try{
            DataOutputStream dos = new DataOutputStream(
                    new BufferedOutputStream(
                            new FileOutputStream("E:\\IO\\file.txt")
                    ));
            dos.writeInt(123456);
            dos.flush();			//刷新缓冲区,将缓冲区的值写入磁盘


            DataInputStream dis = new DataInputStream(new FileInputStream("E:\\IO\\file.txt"));
            int i = dis.readInt();
            System.out.println(i);
            
            dos.close();
            dis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

在这里插入图片描述

明明写入的123456,文件打开看到的是 " 釦" 。但是DataInputStream能成功读取到123456。而如果文件里存放123456直接放DataInputStream流读取反而读出来的不是想要的。总的来说这两个流对数据处理的方式不是给人看的。可以用它来读写但是一定要一起使用也不要好奇为什么乱码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值