java程序设计中文19slide

上传人:第*** 文档编号:48811461 上传时间:2018-07-20 格式:PPT 页数:36 大小:299KB
返回 下载 相关 举报
java程序设计中文19slide_第1页
第1页 / 共36页
java程序设计中文19slide_第2页
第2页 / 共36页
java程序设计中文19slide_第3页
第3页 / 共36页
java程序设计中文19slide_第4页
第4页 / 共36页
java程序设计中文19slide_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《java程序设计中文19slide》由会员分享,可在线阅读,更多相关《java程序设计中文19slide(36页珍藏版)》请在金锄头文库上搜索。

1、*Chapter 19 二进制 I/O1*ObjectivesFTo discover how I/O is processed in Java (19.2).FTo distinguish between text I/O and binary I/O (19.3).FTo read and write bytes using FileInputStream and FileOutputStream (19.4.1).FTo read and write primitive values and strings using DataInputStream/DataOutputStream (

2、19.4.3).FTo store and restore objects using ObjectOutputStream and ObjectInputStream, and to understand how objects are serialized and what kind of objects can be serialized (19.6). FTo implement the Serializable interface to make objects serializable (19.6.1).FTo serialize arrays (19.6.2).FTo read

3、and write the same file using the RandomAccessFile class (19.7).2*引言F文本文件中存储的数据是以字符格式存储的 ,我们可以直接阅读,而二进制文件中存储的 数据是以字节格式存储的,我们不能直接阅读 ,因为它们是为让程序读取而设计的。二进制 文件的优势在于它的处理效率比文本文件高。F例如,十进制整数199在文本文件中是以三个 字符序列“”、“”、“”来存储的,而在二进 制文件中是以byte类型的值C7存储的。FJava提供了许多实现文件输入输出的类,可分 为文本I/O类(Scanner和PrintWriter)和二进制 I/O类(本

4、节介绍)。3*Java如何处理输入输出?File 对象封装文件和路径属性,但是不包含读写文件的方 法。为了进行I/O操作,需要使用正确的Java I/O类创建对象 ,这些对象包含读写文件的方法。例如: PrintWriter output = new PrintWriter(“temp.txt“); output.println(“Java 101“); output.close();Scanner input = new Scanner(new File(“temp.txt“); System.out.println(input.nextLine();4*文本I/O vs. 二进制I/OF计

5、算机并不区分二进制文件与文本文件,所有的文件 都是以二进制形式来存储的,本质上说,所有文件都是 二进制文件。F文件I/O建立在二进制I/O基础上,能提供自动的编码 和解码。在写入字符时,Java虚拟机会将统一码转化为 文件指定的编码,而在读字符时,将文件指定的编码转 化为统一码。如写入字符“1”时,将统一码0x0031转化 为ASCII(Windows系统文本文件默认编码)码“0x31” ,读取时再转化回来。5*二进制 I/OF二进制I/O不需要转化。如果使用二进制I/O向文本写入一 个数值,就是将内存中的确切值复制到文件中。例如,一个 byte类型的值199在内存中表示为0xC7,并且在文件

6、中实际显 示也是0xC7。由于二进制I/O不需要编码和解码,所以它比 文本I/O效率高。另外,二进制文件与主机的编码方案无关 ,所以它是可移植的,在任何机器上的Java程序都可以读取 Java程序所创建的二进制文件。6*二进制 I/O类FJava I/O类的设计是一个很好的应用继承的例子, 它们的公共操作是由父类生成的,而子类提供专门的 操作。7*The value returned is a byte as an int type.InputStream8*The value is a byte as an int type.OutputStream9*FileInputStream/Fil

7、eOutputStreamFileInputStream/FileOutputStream 所有方法都是从 InputStream/OutputStream类继承的 ,没有引入新的方法。10*FileInputStream为构造 FileInputStream对象, 使用下面的构造方法: public FileInputStream(String filename) public FileInputStream(File file)如果试图为一个不存在的文件创建 FileInputStream 对象,将会发生java.io.FileNotFoundException11*FileOutputS

8、tream为构造 FileOutputStream 对象, 使用下面的构造方法 public FileOutputStream(String filename) public FileOutputStream(File file) public FileOutputStream(String filename, boolean append) public FileOutputStream(File file, boolean append)如果文件不存在,就会创建一个新文件。如果文件已经存在,前 两个方法将会删除文件的当前内容。为了既保留文件现有的内容 又可以给文件追加新数据,将最后两个构造

9、方法的参数append设 置为true。 几乎所有的I/O类的中方法都会抛出异常java.io.IOException。因 此必须进行异常处理。TestFileStreamRun12*FilterInputStream/FilterOutputStreamFilter streams 是为某种目的过滤字节的数据流。基本字节输入流 提供的读取方法read只能用来读取字节,如果要读取整数值等, 就需要一个过滤器类来包装字节输入流,从过滤器类就可以读 取整数值等类型的数据。FilterInputStream/FilterOutputStream是 过滤数据的基类。需要处理基本数值类型时,使用 Dat

10、aInputStream/DataOutputStream来过滤字节。13*DataInputStream/DataOutputStreamDataInputStream 从数据流读取字 节,并且将它们转换为基本类型 值或字符串DataOutputStream 将基本类型的值或字 符串转换为字节并输出到数据流14*DataInputStreamDataInputStream 继承 FilterInputStream 并实现 DataInput 接口.15*DataOutputStreamDataOutputStream继承FilterOutputStream实现DataOutput接口.16*

11、二进制 I/O中的字符与字符串writeChar vs. writeByte? writeChar方法是将字符的统一码写入输出流,而writeByte方法 是将字符统一码的低字节写到输出流,高字节丢弃。Why UTF-8? What is UTF-8? UTF-8 是一种允许ASCII码和统一码一起操作的编码方案,大多 数操作系统使用ASCII码,Java使用统一码,由于许多应用程序 只需要ASCII码字符集,如将8位的ASCII码转化为16位的统一码 是很浪费的。UTF-8修改版方案分别使用1字节、2字节或3字节 来存储字符。如果字符的编码值小于或等于0x7F就将该字符编 码为一个字节,如果

12、大于0x7F而小于或等于0x7FF就将该字符编 码为两个字节,如大于0x7FF就编码为三个字节。 UTF-8字符串之前的两个字节用来存储字符串中的字符个数。例 如,writeUTF(“ABCDEF”) 写入文件的是个字节(即00 06 41 42 43 44 45 46)。readUTF方法读取一个使用writeUTF方法写入 的字符串。 17*使用 DataInputStream/DataOutputStream 数据流用于对已经存在的输入输出流进行包装,以便在原始流中 过滤数据,下列构造方法: public DataInputStream(InputStream instream) pub

13、lic DataOutputStream(OutputStream outstream)DataInputStream infile =new DataInputStream(new FileInputStream(“in.dat“); DataOutputStream outfile =new DataOutputStream(new FileOutputStream(“out.dat“);TestDataStreamRun18*检测文件的末尾TIP: 如果到达输入流末尾之后还继续读取数据,就会发生 EOFException 异常。 input.available() 可以检测. input

14、.available() = 0 表示到达输入流末尾。顺序和格式注意: 应该按存储的顺序和格式读取文件中的数据。例如,学生 的姓名是用 writeUTF方法以UTF-8格式写入的,所以读取时必须 用 readUTF方法。TestDataStreamRun19*BufferedInputStream/ BufferedOutputStreamUsing buffers to speed up I/O BufferedInputStream/BufferedOutputStream 可以通过添加缓冲区来减少读写 次数来提高输入输出的速度。BufferedInputStream/BufferedOu

15、tputStream 没 有包含新的方法,所有的方法都继承自 InputStream/OutputStream. 20*BufferedInputStream/BufferedOutputStream / Create a BufferedInputStream public BufferedInputStream(InputStream in) public BufferedInputStream(InputStream in, int bufferSize)/ Create a BufferedOutputStream public BufferedOutputStream(OutputS

16、tream out) public BufferedOutputStream(OutputStreamr out, int bufferSize)21*问题: 复制文件 开发一个复制文件的程序。用户需要提供一个源文件与一个目 标文件作为命令行参数,所使用的命令如下:java Copy source target要把源文件的内容复制到目标文件,不管文件的内容如何,采 用二进制流都会比较合适。CopyRun22*对象 I/ODataInputStream/DataOutputStream 可以实现基本数据类型与字 符串的 I/O。 ObjectInputStream/ObjectOutputStream 除了可以实 现基本数据类型与字符串的输入和输出之外,还可以实现对象 的输入和输出。Optional23*ObjectInputStreamObjectInputStream extends InputStream and implements ObjectInput and ObjectStreamConstants. 24*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 外语文库 > 英语学习

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号