Java的DataInputStream和DataOutputStream数据输入输出流

DataInputStream和DataOutputStream是Java中常用的数据输入输出流,它们提供了一种用于串行化和反串行化基本java数据类型的方法。在处理二进制数据时,这两个类可以很好的对数据进行读和写操作。下面就来详细讲解这两个输入输出流的使用。

DataInputStream

DataInputStream是一种基于字节流的数据输入流。在使用DataInputStream前,需要使用FileInputStream或者ByteArrayInputStream创建一个输入源。使用DataInputStream的readXXX()方法可以读取字节序列,并将其转换为对应类型的Java数据类型。以下是读取操作的示例:

try(DataInputStream dis = new DataInputStream(new FileInputStream("test.dat"))){
    double d = dis.readDouble();
    int i = dis.readInt();
    boolean b = dis.readBoolean();
    String s = dis.readUTF();
    System.out.println(d + " " + i + " " + b + " " + s);
} catch(IOException e){
    e.printStackTrace();
}

上述代码中,读取的数据类型包括double、int、boolean和String。其中最后一个readUTF()方法是用于读取字符串类型的,读取时会先读取一个short类型的长度标记,然后再读取字符串数据。如果读取时碰到了数据块的EOF(End of File),那么DataInputStream其他的readXXX()方法都将会抛出EOFException异常。

DataOutputStream

DataOutputStream是一种基于字节流的数据输出流。使用DataOutputStream的writeXXX()方法可以将Java数据类型序列化为字节序列,并写入到输出流中。以下是一个写入示例:

try(DataOutputStream dos = new DataOutputStream(new FileOutputStream("test.dat"))){
    dos.writeDouble(3.1415926);
    dos.writeInt(100);
    dos.writeBoolean(true);
    dos.writeUTF("hello");
} catch(IOException e){
    e.printStackTrace();
}

上述代码将一个double、一个int、一个boolean和一个String类型的数据写入了流中。在输出时,DataOutputStream采用Java虚拟机默认的endianness,也就是当前系统的字节序。如果想要使用特定的字节序,可以使用DataOutputStream提供的writeXXXOptionEndian()方法。

结语

总之,DataInputStream和DataOutputStream是Java中二进制数据读写的好帮手。在处理二进制数据时,使用这两个类可以更加便捷和高效,同时也避免了手动进行二进制数据分析的困扰。如果在文件IO或网络IO中遇到了需要数据类型转换和序列化的场合,可以考虑使用这两个类来解决问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java的DataInputStream和DataOutputStream数据输入输出流 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java sdk安装及配置案例详解

    Java SDK安装及配置攻略 1. 下载Java SDK 首先,在Oracle官网(https://www.oracle.com/java/technologies/javase-downloads.html)下载最新版本的Java Development Kit(JDK)。 2. 安装Java SDK 接下来,进行Java SDK的安装。Windows平…

    Java 2023年5月20日
    00
  • Java超详细讲解设计模式之一的单例模式

    Java超详细讲解设计模式之单例模式 1. 什么是单例模式? 单例模式是一种常用的设计模式,简单来说就是保证一个类只有一个实例,并且提供一个全局访问点。 它能够避免因为对象过多而导致系统性能下降的问题,实现对象的复用,以及编译器对一些变量、对象和方法进行统一管理的好处。 常见应用场景有以下几个方面: 一个对象需要在系统中被重复使用 一个共享资源(如数据库等)…

    Java 2023年5月26日
    00
  • 浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及SpringMVC 的配置文件

    浅谈SpringMVC的拦截器(Interceptor)和Servlet的过滤器(Filter)的区别与联系及SpringMVC的配置文件 拦截器和过滤器的区别与联系 拦截器和过滤器都是Web应用程序中常用的组件,它们可以用来拦截请求并进行处理。虽然它们的作用类似,但是它们之间还是有一些区别的。 区别 拦截器是SpringMVC框架中的组件,而过滤器是Ser…

    Java 2023年5月18日
    00
  • SpringMVC中使用@PathVariable绑定路由中的数组的方法

    SpringMVC中使用@PathVariable绑定路由中的数组的方法 在SpringMVC中,我们可以使用@PathVariable注解将路由中的参数绑定到方法的参数上。如果路由中的参数是一个数组,我们可以使用@PathVariable注解来绑定它。本文将详细讲解SpringMVC中使用@PathVariable绑定路由中的数组的方法。 1. 绑定路由中…

    Java 2023年5月18日
    00
  • jquery实现联想词搜索框和搜索结果分页的示例

    首先,需要明确的是,jQuery 是一个 JavaScript 函数库,其目的是使JavaScript的使用更容易,简洁。使用 jQuery 可以帮助我们更快捷地编写出与原生 JavaScript 相同的功能。 要实现一个联想词搜索框和搜索结果分页,大致可以分为以下几个步骤: 1. 设计 UI 首先,我们需要设计一下我们的页面 UI,包括搜索框、搜索结果展示…

    Java 2023年6月15日
    00
  • Spring-基于Spring使用自定义注解及Aspect实现数据库切换操作

    下面是详细讲解基于Spring使用自定义注解及Aspect实现数据库切换操作的完整攻略。 简介 随着项目规模的增大,往往需要使用多个数据库,每个库分配到不同的模块或者不同的服务。如何快速方便地切换数据库是我们需求的核心,本文主要介绍基于Spring使用自定义注解及Aspect实现数据库切换操作。 准备工作 首先需要安装Spring Framework,建议使…

    Java 2023年5月20日
    00
  • java实现登录验证码

    下面是“java实现登录验证码”的完整攻略。 简介 验证码是一种防止网站被机器人攻击的常用手段,它需要用户正确地输入由图片或数字组成的随机字符串。本文将介绍如何在Java中实现登录验证码功能。 步骤 生成验证码图片。 在使用Java实现验证码时,可以使用第三方库或自己编写代码生成验证码图片。其中,常用的第三方库包括JCaptcha和Kaptcha等。这里以K…

    Java 2023年5月19日
    00
  • 2023年4月21日-关于远程feign调用实现文件上传下载

    一、客户需求:做一个查询程序,客户提供一个excel模板,将查询结果保存到excel模板中,上传到文件服务,供客户下载使用。 二、代码实现 // 服务A,文件上传 @ApiOperation(“上传文件-demo”) @PostMapping(value = “/uploadDemo/{busType}/{billId}”) public ResBean u…

    Java 2023年4月22日
    00
合作推广
合作推广
分享本页
返回顶部