java流与文件——读写二进制数据(DataOutput + DataInput)

【0】README

0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件——读写二进制数据(DataOutput + DataInput)的相关知识;
0.2) for complete my diy code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter1/BinaryIO.java


【1】DataOutput

1.0)DataOutput 接口定义 了 下面用于以二进制格式写数组, 字符, boolean 和 字符串的方法:
writeChars, writeByte, writeInt, writeShort, writeLong, writeFloat, writeDouble, writeChar, writeBoolean, writeUTF;
1.1)例如, writeInt 总是将一个整数写出为 4字节的二进制数量值;
1.2)不管它有多少位, writeDouble 总是将一个double值写出为 8 字节的二进制数量值;
1.3)这样产生的结果并非人可阅读的, 但是对于给定类型的每个值, 所需的空间总是相同的, 而且将其读回也比解析文本要更快;(干货——解析二进制数据比解析文本数据要更快)

Attention)

  • A1)在 java中,所有的值都按照 高位在前的模式写出, 不管使用何种处理器, 这使得java 数据文件独立于平台;
  • A2) 如 1234(10)=4D2(16): 高位在前顺序为 00 00 04 D2 ; 而 低位在前顺序为 D2 04 00 00;

【2】 writeUTF方法:

2.1)writeUTF方法 使用修订版的8位 Unicode转换格式写出字符串;这种方式与直接使用标准的UTF-8 编码方式不同, 其中, Unicode码元序列首先用 UTF-16 表示, 其结果之后使用 UTF-8 规则进行编码;
2.2)修订后的 编码方式对于编码大于 0xFFFF 的字符的处理有所不同, 这是为了向后兼容在Unicode 还没有超过16 位时构建的虚拟机;
这里写图片描述

Attention) (干货——如何使用 writeChars 和 writeUTF 方法)

  • A1)因为没有其他方法会使用 UTF-8 的这种修订, 所以你应该只在写出用于 java 虚拟机的字符串时才使用 writeUTF方法;例如,当需要编写一个生产字节码序列的程序时;
  • A2)而对于其他场合, 都应该使用 writeChars 方法;

【3】DataInput方法: 为了读回数据, 可以使用在 DataInput 接口中定义的下列方法:

  • readInt, readShort, readLong, readFloat, readDouble, readChar, readBoolean, readUTF;

3.1)读入二进制数据: DataInputStream 类实现了DataInput接口, 为了从文件中读取二进制数据, 可以将 DataInputStream与某个字节源进行组合, 如 FileInputStream:
DataInputStream dis = new DataInputStream(new FileInputStream(“employee.dat”));
3.2)写出二进制数据: DataOutputStream dos = new DataOutputStream(new FileOutputStream(“employee.dat”));
这里写图片描述


【4】随机访问文件(RandomAccessFile 同时实现了 DataInput 和 DataOutput 接口)

  • Attention) for detailed RandomAccessFile, please visit http://blog.csdn.net/PacosonSWJTU/article/details/50513407

4.0)RandomAccessFile 类 : 可以 在文件中任何位置查找或写入数据;(干货——这是引入 RandomAccessFile 类的原因)
4.1) RandomAccessFile类可以在文件中的任何位置查找或读写数据;
4.2)磁盘文件都是可以随机访问的, 但是从网络而来的数据流却不是;
4.3)打开一个随机访问文件,只用于读入或同时用于读写;

RandomAccessFile in= new RandomAccessFile("employee.dat", "r");
RandomAccessFile inOut = new RandomAccessFile("employee.dat", "rw");

4.4)seek 方法:随机访问文件有一个表示下一个将被读入或写出的字节所处的位置的文件指针, seek 方法可以将这个文件指针设置到 文件中任意字节 的位置;

  • 4.4.1)假设想读入第三条数据:
    long n = 3;
    in.seek((n-1) * RECORD_SIZE);
  • 4.4.2)如果你希望修改数据,请切记将文件指针重置到开始处:
    in.seek((n-1) * RECORD_SIZE);
    e.writeData(out);
  • 4.4.3)length 方法:确定文件大小,使用 length 方法;

4.5) 整数和浮点值在二进制格式中都有固定的尺寸, 但处理 字符串就有些麻烦了, 我们提供了 两个助手方法来读写具有固定尺寸的字符串:

  • writeFixedString 方法: 写出从字符串开头开始的指定数量的码元;
  • readFixedString 方法: 从输入流中读入字符, 直至读入size 个码元, 或者直至到具有0值的字符值, 然后跳过输入字段中剩余的 0值;为了提高效率,使用 StringBuilder 类来读入字符串;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dsp课程设计c语言源码,DSP课程设计-基于C语言实现256点的FFT精选.pdf

DSP课程设计-基于C语言实现256点的FFT精选XX 大学J1111111 UNIVERSITYDSP 课 程 设 计基于CCS 的FFT 算法的C 语言实现和验证学院名称:专业班级:学 号:学生姓名:指导教师姓名:201 年 0 月 0 日一、 课程设计目的1.此次…

java 字符数组与字符串_用于字符串和数组的5种简单有效的Java技术

java 字符数组与字符串Java通常会排在前五种最流行的编程语言中,因此可以理解。 它是一种通用语言,非常容易学习,因为它是一种高级语言,并且可以满足许多用例。 由于这些原因,Java是一门很棒的语言,可以用来…

Hibernate之映射

一、映射文件 Hibernate在实现ORM功能的时候主要用到的文件有: 1、 映射类(*.Java) 描述数据库表的结构,表的字段映射为类的属性,表的记录映射为类的对象。 2、映射文件(*.hbm.xml) …

java流与文件——ZIP文档

【0】README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件——ZIP文档 的相关知识; 0.2) for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/cha…

单片机与gsm通信c语言,gsm模块如何与单片机通信?

51单片机与GSM模块实现通信1、检测串口线的好坏1)将串口线插在电脑上,用短路子短接串口的2脚和3脚2)打开串口调试助手3)点击自动发送,在自动发送的窗口中随便发个数据,看看能不能接收到若能接收到自己发的数据表示串口线是正常的,…

aws terraform_在AWS第1部分中使用Terraform自动缩放组:基本步骤

aws terraform因此,您想使用Terraform在AWS上创建一个自动缩放组。 以下是达到此目的的最少步骤。 在编写实际代码之前,应指定aws terraform提供程序以及provider.tf文件上的区域。 provider "aws" { version "~> 2.0" region …

java流与文件——java生成解压缩文件(夹)

【0】README 0.1) 本文描述转自 http://blog.csdn.net/chenssy/article/details/9622171 , 旨在理解 java流与文件——java生成解压缩文件(夹) 的相关知识; 0.2) for my diy source code, please visit h…

Java的系统Property

一、java 系统Properties修改 (1)System.getProperties()可以确定当前的系统属性,返回值是一个Properties; (2)System.load(String filename)加载文件中的属性Properties等同于:System.getProperties().load(String filename) (3)System.setProperties(Properties p…

android 发布最新系统更新包,安卓升级包(安卓补丁包更新)

安卓升级包(安卓补丁包更新)2021-02-08 15:39“固件升级”文石BOOX Android 6.0及以上型号都支持升级最新系统!好消息!截至今天,您在BOOX安卓6.0系统以上的所有阅读器型号,都支持升级到最新BOOX OS 2.3.1系统了!?的设…

apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第3部分)

apache.camel我以前曾在博客中介绍过我们在下一个Camel 3.1版本中所做的优化 博客第1部分 博客第2部分 今天,我想简要介绍一下我们已经完成的最新开发,因为我们准备在本周末或下半年准备好构建和发布Camel 3.1。 从第2部分开始,我们设法在…

AVL树的单双旋转解析

【0】README 0.0) 本文部分idea 转自:http://blog.csdn.net/collonn/article/details/20128205 0.1) 本文专注于 解析 AVL 树的 单旋转(左左单旋转和右右单旋转) 和 双旋转(左右双旋转和右左单旋转&#…

List转数组toArray方法

一、List.toArray方法 List提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法&#xff1a; Object[]toArray() 返回按适当顺序包含列表中的所有元素的数组&#xff08;从第一个元素到最后一个元素&#xff09;。<T> T[]toArray(T…

android定位会出现的问题,android – 使用GPS_PROVIDER进行定位时出现问题

使用&#xff1a;locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES,MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, locationListener);对于locationListener,您可以使用&#xff1a;LocationListener locationListener new Locati…

自底向上伸展树(之字形旋转+一字形旋转)

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c;核心剖析路线为原创&#xff0c; 旨在理清 自底向上伸展树&#xff08;之字形旋转一字形旋转&#xff09; 的基本思路&#xff1b; 0.2&#xff09; 自底向上伸展树 是基于 AVL树&#xff0c;for deta…

apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第2部分)

apache.camel我以前曾在博客中介绍我们在下一个Camel 3.1版本&#xff08;第1部分&#xff09;中所做的优化 。 今天&#xff0c;我想发布大约4周后的状态更新。 我们集中在三个方面优化骆驼核心&#xff1a; 不必要的对象分配 不必要的方法调用 提高绩效 换句话说&#…

Util包中Arrays

java.util 类 Arrays java.lang.Object -java.util.Arrayspublic class Arrays extends Object此类包含用来操作数组&#xff08;比如排序和搜索&#xff09;的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。 除非特别注明&#xff0c;否则如果指定数组引用为 …

Android的sqlite使用外部,Android 使用外部已经建立好的sqlite数据库

最近项目需要通过电话号码查询归属地&#xff0c;决定直接在本地sqlite的数据库进行查询&#xff0c;没必要去访问网络(虽然最后还是决定还是将数据库放在服务器上)一 首先先将外部的sqlite数据库放入assets文件夹下面注意&#xff1a;必须是sqlite数据库(XXX.db)&#xff0c;如…

java流与文件——操作文件

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——操作文件 的相关知识&#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/ch…

阅读副本和Spring Data第2部分:配置基础项目

在上一篇文章中&#xff0c;我们使用相同的数据设置了多个PostgreSQL实例。 下一步将是使用这两个服务器来配置spring项目。 如前所述&#xff0c;由于我们使用完全相同的数据库&#xff0c;因此我们将使用Spring Boot JPA帖子中的一些代码。 这将是我们的gradle构建文件 pl…

java生成UUID通用唯一识别码

一、UUID概述UUID含义是通用唯一识别码 (Universally Unique Identifier)&#xff0c;这是一个软件建构的标准&#xff0c;也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。 UUID 的目…