《Java语言程序设计》(基础篇原书第10版)第十七章复习题答案

第十七章
17.1:文本文件是由字符序列构成的,而二进制文件是由位(bit) 序列构成的。可以用文本编辑器来读取文本文件,但不能用文本编辑器来读取二进制文件。
17.2:使用Java的I/O流来创建对象,并使用对象中的方法来执行I/O。Java的IO对象称为流。用于读取数据的对象称为输入流,即数据流入程序;用于写入数据的对象称为输出流,即数据流出程序。
17.3:二进制 I/O不需要编码和解码,所以,它比文本 I/O效率高。二进制文件与主机的编码方案无关,因此,它是可移植的。在任何机器上的 Java 程序可以读取 Java 程序所创建的二进制文件。这就是为什么Java 的类文件存储为二进制文件的原因。Java 类文件可以在任何具有 Java 虚拟机的机器上运行。
17.4:字符在内存中使用Unicode表示,字符在文件中使用指定的编码方案表示。如果未指定的编码方案,则使用系统的默认编码方案。
17.5: 如果在一个 ASCII 码文本文件中写人字符串 “ABC”, 那么在文件中存储的是什么Ox41 Ox42 Ox43.
17.6: 如果在一个 ASCII 码文本文件中写人宇符串"100", 那么在文件中存储的是Ox31 Ox30 Ox30; 如果使用二进制 I/O写人宇节类型数值 100, 那么文件中存储的是Ox64.
17.7:在java程序中表示的字符的编码方案是Unicode,默认情况下,文本文件使用ASCII码进行编码。
17.8: 在 Java 1/0程序中,必须在方法中声明抛出异常 IOExceprion 或者在 try-catch 块中处理该异常的原因是,在I/O几乎所有的方法和构造函数运行过程中总会出现一些意想不到的情况。
17.9:关闭流的原因:(1)关闭流确保数据写入文件。(2)关闭流释放由流对象获取的资源;关闭流的方法:(1)调用close()方法 (2)使用try-catch语句自动关闭流。
17.10:在0-255范围内,字节的值作为int值返回,由于未到达流的末尾而没有可用的字节,则返回的值为-1.InputStream中唯一的抽象方法时read();OutputStream中唯一的抽象方法时write()。
17.11: FilelnputStream 类和 FileOutputStream 类的所有方法都是继承自 InputStream/OutputStream类,使用new FileInputStream(filename)、newFileOutputStream(filename)或者new FileInputStream(file)、new FileOutputStream(file)去创建一个FileInputStream和FileOutputStream。
17.12:如果试图为不存在的文件创建输入流,则会发生FileNotFoundException。如果使用new FileOutputStream(filename, true)或者new FileOutputStream(file, true)创建输出流,则可以在现有文件中追加数据,否则,如果文件已经存在,则重写该文件。
17.13:new Formatter(new FileOutputStream(“temp.txt”,true));如果temp.txt不存在则创建它,如果temp.txt存在,则将新数据追加到文件中。
17.14:使用DataInputStream中的readDouble()方法读取double值,并使用EOFException检测文件的结尾。
17.15:writeByte(91)使用FileOutputStream将数字91的一个字节(十六字节为Ox5B,二进制为01011011)写入文件。
17.16: 在输人流(FilelnputStream 和 DatalnputStream)中,如果read()方法返回-1,则它位于文件的末尾。
17.17:由于java.io.FileNotFoundException是IOException的子类,所以FileNotFoundException的catch子句应该放在IOExceptioncatch子句之前。
17.18:java使用Unicode码,Windows使用ASCII码,在编写字符时,Unicode码将被转换为ASCII码,程序完成后,文件将包含8个字节,每个字节代码一个ASCII码,分别是31 32 33 34 35 36 37 38,注意字符‘1’的十六进制ASCII码为31.
17.19:每一个int值需要4个字节,有两个int值被写入文件,所以该文件包含8个字节,前四个字节用于1234,后四个字节用于5678,字节内容为它们的十六进制表示形式。
17.20: 下面这些关于 DataOutputStream 对象 output 上的语句,会有多少个字节发送到输出:
output.writeChar(‘A’); 1 + 1 = 2 bytes
output,writeChars(“BC”); 2 + 2 = 4 bytes
output.writeUTF(“DEF”); 2 + 3 = 5 bytes
17.21:可以通过使用缓冲输入或输出流来提高性能。可以通过InputStream/Reader的任何实例来包装创建缓冲输入流,可以通过OutputStream/Writer的任何实例上包装创建缓冲输出流。
17.22:用File类的exists()方法。
17.23:判断判断read()方法返回的的值是否为-1,为-1则已经达到文件末尾。
17.24:每一次读取数据,数值numberOfBytesCopied就会增加1.
17.25:可以存储可序列化的对象,writeObject()可以写入对象,readObject()可以读取对象,readObject()方法返回对象类型的值,从ObjectInputStream读取对象的方法的返回值类型是Object对象。
17.26:它们不会占用相同的空间,例如ArrayList对象可能有不同的大小,因此它们被有序化成不同的大小,考虑两个Button对象。如果一个按钮有图标,而另一个按钮没有图标,则在有序化文件时,带有图标的按钮将需要更多的空间。
17.27:否,对象的静态变量不可序列化,使用,transient关键字
17.28:可以向ObjectOutputStream中写入一个数组,如果数组的所有元素都可以有序化,则可以序列化数组。
17.29:是,因为ObjectlnputStream 和 ObjectOutputStream包含DatalnputStream 和 DataOutputStream中的所有特性和操作。
17.30:会报java.io.NotSerilizableEception异常,因为B对象没有实现Serializable接口
17.31:RandomAccessFile 流是可以读写由 DataOutputStream创建的数据文件,RandomAccessFile 流不可以读写对象。
17.32:创建DataOutputStream只可以向文件中写入数据,创建RandomAccessFile可以实现对文件的读写,任一位置的修改
17.33:它可以很好的编译,但是在调用readInt()时会引发一个运行时异常,因为文件中没有任何内容。

你可能感兴趣的:(《Java语言程序设计》(基础篇原书第10版)第十七章复习题答案)