《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.3.1 DataInput和DataOutput接口

2.3.1 DataInput和DataOutput接口

DataOutput接口定义了下面用于以二进制格式写数组、字符、boolean值和字符串的方法:

例如,writeInt总是将一个整数写出为4字节的二进制数量值,而不管它有多少位,writeDouble总是将一个double值写出为8字节的二进制数量值。这样产生的结果并非人可阅读的,但是对于给定类型的每个值,所需的空间都是相同的,而且将其读回也比解析文本要更快。
注意:根据你所使用的处理器类型,在内存存储整数和浮点数有两种不同的方法。例如,假设你使用的是4字节的int,如果有一个十进制数1234,也就是十六进制的4D2(1234 = 4×256 + 13×16 + 2),那么它可以按照内存中4字节的第一个字节存储最高位字节的方式来存储为:00 00 04 D2,这就是所谓的高位在前顺序(MSB);我们也可以从最低位字节开始:D2 04 00 00,这种方式自然就是所谓的低位在前顺序(LSB)。例如,SPARC使用的是高位在前顺序, 而Pentium使用的则是低位在前顺序。这就可能会带来问题,当存储C 或者C++文件时,数据会精确地按照处理器存储它们的方式来存储,这就使得即使是最简单的数据在从一个平台迁移到另一个平台上时也是一种挑战。在Java中,所有的值都按照高位在前的模式写出,不管使用何种处理器,这使得Java数据文件可以独立于平台。
writeUTF方法使用修订版的8位Unicode转换格式写出字符串。这种方式与直接使用标准的UTF-8编码方式不同,其中,Unicode码元序列首先用UTF-16表示,其结果之后使用UTF-8规则进行编码。修订后的编码方式对于编码大于0xFFFF的字符的处理有所不同,这是为了向后兼容在Unicode还没有超过16位时构建的虚拟机。
因为没有其他方法会使用UTF-8的这种修订,所以你应该只在写出用于Java虚拟机的字符串时才使用writeUTF方法,例如,当你需要编写一个生成字节码的程序时。对于其他场合,都应该使用writeChars方法。
为了读回数据,可以使用在DataInput接口中定义的下列方法:

DataInputStream类实现了DataInput接口,为了从文件中读入二进制数据,可以将DataInputStream与某个字节源相组合,例如FileInputStream:

与此类似,要想写出二进制数据,你可以使用实现了DataOutput接口的DataOutput- Stream类:


时间: 2024-10-29 21:17:05

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.3.1 DataInput和DataOutput接口的相关文章

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员. 编写任何一本书籍都难免会有一些错误或不准确的地方.我们非常乐意听到读者的意见.当然,我们更希望对本书问题的报告只听到一次.为此,我们创建了一个FAQ.bug修正以及应急方案的网站http:/

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.3.2 随机访问文件

2.3.2 随机访问文件 RandomAccessFile类可以在文件中的任何位置查找或写入数据.磁盘文件都是随机访问的,但是与网络套接字通信的输入/输出流却不是.你可以打开一个随机访问文件,只用于读入或者同时用于读写,你可以通过使用字符串"r"(用于读入访问)或"rw"(用于读入/写出访问)作为构造器的第二个参数来指定这个选项. 当你将已有文件作为RandomAccessFile打开时,这个文件并不会被删除. 随机访问文件有一个表示下一个将被读入或写出的字节所处位

《面向对象的思考过程(原书第4版)》一2.1 清楚接口和实现之间的区别

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第2章,第2.1节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 2.1 清楚接口和实现之间的区别 正如第1章所示,构建健壮的面向对象设计的关键之一是理解接口和实现之间的不同.因此,当设计类时,应该向用户暴露什么.隐藏什么是非常重要的.而封装与生俱来的数据隐藏机制可以对用户隐藏不必要的数据.小心不要混淆接口与图形化用户接口(graphica

《面向对象的思考过程(原书第4版)》一1.8.1 接口

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.8节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 1.8.1 接口 我们可以看到接口定义了对象之间通信的基本手段.每个类设计接口规格来保证对象能被正确实例化和操作.必须向对象提供的接口发送消息来使用对象暴露的任何行为.接口需要完整描述类与类之间的交互.在大多数面向对象的语言中,访问修饰符指定为public的方法属于接口.私有

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一第3章 XML

第3章 XML ▲ XML概述 ▲ 使用命名空间 ▲ 解析XML文档 ▲ 流机制解析器 ▲ 验证XML文档 ▲ 生成XML文档 ▲ 使用XPath来定位信息 ▲ XSL转换 Don Box等人在其合著的<Essential XML>(Addison-Wesley出版社2000年出版)的前言中半开玩笑地说道:"可扩展标记语言(Extensible Markup Language,XML)已经取代了Java.设计模式.对象技术,成为软件行业解决世界饥荒的方案."确实,正如你将在

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.1 保存和加载序列化对象

2.4.1 保存和加载序列化对象 为了保存对象数据,首先需要打开一个ObjectOutputStream对象: 现在,为了保存对象,可以直接使用ObjectOutputStream的writeObject方法,如下 所示: 为了将这些对象读回,首先需要获得一个ObjectInputStream对象: 然后,用readObject方法以这些对象被写出时的顺序获得它们: 但是,对希望在对象输出流中存储或从对象输入流中恢复的所有类都应进行一下修改,这些类必须实现Serializable接口: Seri

《Java语言导学(原书第6版)》一导读

前 言 自2010年年初Oracle公司收购Sun公司以来,Java语言迎来激动人心的时代.正如Java Community Process计划的活动所印证的,Java语言将不断发展.本书基于Java SE 8(Java Platform Standard Edition 8)并引用其API. 相比本书第5版(针对的是Java版本7),第6版有一些新特点: Lambda表达式使得功能可作为方法参数使用,代码作为数据使用.Lambda表达式描述单个方法接口(也称为功能接口)的实例会更简洁.4.4.

《Java语言导学(原书第6版)》一一第2章 面向对象的编程概念 2.0

第2章The Java Tutorial: A Short Course on the Basics, Sixth Edition面向对象的编程概念如果没有用过面向对象的程序语言,编写Java程序之前一定要先学一些面向对象编程的基本概念.本章介绍对象.类.继承.接口和包等基本概念.每节都通过生活中的例子来解释这些基本概念,同时介绍Java程序语言的语法.2.1节关注对象的概念.对象是具有相关状态和行为的软件.软件对象经常用于建模生活中的对象.本节介绍对象的状态和行为的表示方式以及数据封装的概念,