Java-DataInputStream介绍

文章介绍了JavaDataInputStream类的功能,包括其读取各种数据类型的方法,以及在二进制文件、网络协议解析、序列化对象读取和字节流解析中的应用场景。提醒读者注意数据读取顺序和使用场景的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🌺个人主页:杨永杰825_Spring,Mysql,多线程-CSDN博客

每日一句:成为架构师路途遥远

📢欢迎大家:关注🔍+点赞👍+评论📝+收藏⭐️

目录

前言

​编辑

方法

使用场景

案例


 

前言

  • Java的DataInputStream是一个输入流,它允许应用程序从底层输入流中以字节为单位读取基本数据类型的数据。它提供了一系列的read方法,可以读取不同类型的数据,例如字节、字符、整数、浮点数等。
  • DataInputStream是一个装饰器模式的典型应用,它包装了底层的输入流,并提供了更方便的方法来读取数据。它还提供了用于读取UTF-8编码的字符串的方法。
  • 使用DataInputStream时,要注意读取数据的顺序必须与写入数据的顺序相匹配。否则,读取数据可能会出现错误。

方法

Modifier and TypeMethod and Description
intread(byte[] b)

读取一定数量的字节从包含输入流并存入缓冲区阵列 b

intread(byte[] b, int off, int len)

读到 len从包含输入流读入字节数组数据字节。

booleanreadBoolean()

看到的 DataInputreadBoolean方法一般合同。

bytereadByte()

看到的 DataInputreadByte方法一般合同。

charreadChar()

看到的 DataInputreadChar方法一般合同。

doublereadDouble()

看到的 DataInputreadDouble方法一般合同。

floatreadFloat()

看到的 DataInputreadFloat方法一般合同。

voidreadFully(byte[] b)

看到的 DataInputreadFully方法一般合同。

voidreadFully(byte[] b, int off, int len)

看到的 DataInputreadFully方法一般合同。

intreadInt()

看到的 DataInputreadInt方法一般合同。

StringreadLine()过时的。 此方法没有正确地将字节转换为字符。作为 JDK 1.1,阅读文本行的首选方式是通过BufferedReader.readLine()方法。程序使用的DataInputStream类的台词可以转换的形式替换代码中使用BufferedReader类:
     DataInputStream d = new DataInputStream(in);
     BufferedReader d
          = new BufferedReader(new InputStreamReader(in));
longreadLong()

看到的 DataInputreadLong方法一般合同。

shortreadShort()

看到的 DataInputreadShort方法一般合同。

intreadUnsignedByte()

看到的 DataInputreadUnsignedByte方法一般合同。

intreadUnsignedShort()

看到的 DataInputreadUnsignedShort方法一般合同。

StringreadUTF()

看到的 DataInputreadUTF方法一般合同。

static StringreadUTF(DataInput in)

从流 in一个Unicode字符串的编码格式在 modified UTF-8表示读取;这个字符串是作为一个 String返回。

intskipBytes(int n)

看到的 DataInputskipBytes方法一般合同。

以下是一些常用的DataInputStream方法:

  • readBoolean():读取一个布尔值。
  • readByte():读取一个字节。
  • readChar():读取一个字符。
  • readDouble():读取一个双精度浮点数。
  • readFloat():读取一个单精度浮点数。
  • readInt():读取一个整数。
  • readLong():读取一个长整数。
  • readShort():读取一个短整数。
  • readUTF():读取一个UTF-8编码的字符串。

例如,以下代码演示了如何使用DataInputStream从文件中读取数据:

try (DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"))) {
    int value = dis.readInt();
    double pi = dis.readDouble();
    String message = dis.readUTF();
    
    System.out.println("Value: " + value);
    System.out.println("PI: " + pi);
    System.out.println("Message: " + message);
} catch (IOException e) {
    e.printStackTrace();
}

在上面的示例中,DataInputStream从名为"data.txt"的文件中读取一个整数、一个双精度浮点数和一个字符串,并将它们打印到控制台上。

使用场景

Java的DataInputStream类主要用于读取二进制数据。它提供了一组方法来从输入流中读取不同类型的数据,如整数、浮点数、布尔值和字符串等。它常用于以下场景:

  1. 读取二进制文件:DataInputStream可以打开二进制文件并从中读取数据。它可以读取任意类型的数据,并按照预定的格式解析。

  2. 解析网络协议:许多网络协议使用二进制格式传输数据。DataInputStream可以从网络连接中读取数据,并根据协议定义解析数据。

  3. 读取序列化对象:Java的序列化机制可以将对象转换为二进制表示形式,然后保存到文件或在网络上传输。DataInputStream可以读取序列化对象的二进制表示,并将其还原为原始的Java对象。

  4. 解析字节流:有时候需要从字节流中解析各种类型的数据。DataInputStream提供了方便的方法来读取字节流中的不同类型的数据。

需要注意的是,DataInputStream是字节流(InputStream)的子类,因此它适用于读取二进制数据。若要读取文本数据(如字符数据),建议使用Reader类。

案例

以下是一个使用DataInputStream读取二进制文件的示例:

import java.io.*;

public class DataInputStreamExample {
    public static void main(String[] args) {
        try (DataInputStream dis = new DataInputStream(new FileInputStream("data.bin"))) {
            // 读取整数
            int value = dis.readInt();
            System.out.println("Value: " + value);
            
            // 读取浮点数
            double pi = dis.readDouble();
            System.out.println("PI: " + pi);
            
            // 读取字符串
            String message = dis.readUTF();
            System.out.println("Message: " + message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 上面的代码首先创建了一个DataInputStream,它使用FileInputStream来读取名为"data.bin"的二进制文件。然后使用readInt方法读取一个整数、readDouble方法读取一个浮点数,最后使用readUTF方法读取一个字符串。
  • 假设"data.bin"的二进制内容是一个整数123,一个浮点数3.14和一个字符串"Hello, World!",运行上面的代码将输出:
Value: 123
PI: 3.14
Message: Hello, World!

这表明成功读取了二进制文件中的数据并将其打印出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java杨永杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值