java程序设计与问题解决(高级篇)-读书笔记-2

System.out、Scannner类的对象都是流

 

拥有使得二进制数字对程序和编辑器来说就像字符一样的流和方法的文件是文本文件

内容必须作为二进制数字序列处理的文件则是二进制文件

 

文本文件的优点:在所有计算机上看起来都一样;可以用文本编辑器将其读入读出

二进制文件的优点:处理效率高;必须由程序来完成其读入读出

 

Java的设计者将二进制文件设计成与平台无关的,对Java来说,可以将二进制文件从一种类型的计算机移动到另一种类型的计算机中去,而Java程序仍然能够读入二进制文件。也就是说二进制文件对于Java来说也拥有了文本文件所具有的便携性

 

PrintWriter类是向文本文件写入时常用的流类,需要import java io.*; 它使用FileOutputStream类型对象作为其构造器形参

 

output.txt中.txt这样的后缀对Java程序来说没有特殊的意义,只是用.txt来说明这是一个文本文件,这仅仅是一个惯例

 

当创建文件时,使用的文件名已经被用作目录(文件夹)名的时候,就会抛出FileNotFoundException异常

 

调用close方法之前会调用flush方法

 

如果程序正常终止但却没有关闭文件的话,系统会自动将其关闭,但如果程序非正常终止,在Java可能无法将文件关闭,文件打开了但却已经没有程序与之连接,这种情况会破坏文件,越早关闭文件,发生这种破坏的可能性就越小

 

如果程序向一个文件中写入,稍后又从同一个文件中读出,它就必须在向文件写入之后先关闭这个文件,然后再次打开文件进行读出(Java中有个类允许文件同时为输入输出打开)

 

try块也是一个“块”,在这个块中申明的变量是局部变量,出了这个块就用了

 

BufferedReader类是从文本文件读出时常用的流类,它使用FileReader类型对象作为其构造器形参

 

输入路径名时反斜杠可以直接用’\’表示,在常量字符串中则需要用“\\”表示

Java接受以window或unix格式书写的路径名,在window平台下,也可以使用’/’(推荐)

 

使用File类中的方法可以查看文件特性

 

Java从二进制文件中读入数据与从计算机主存中读入的方式完全一样

 

处理二进制文件时常用的流类为ObjectInputStream和ObjectOutputStream

 

UTF = Unicode Text Format

UTF编码对ASCII字符使用了短的、高效的编码

 

writeUTF在文件中用不同的字节数存储不同的字符串,二进制文件中字符串代码起始处的信息说明了要读入多少字节,而不是字符串中有多少字符使用UTF编码方式,不同的字符会被编码成不同数量的字节

 

Java中类类型实参是作为一个无法改变的内存地址传递给方法的。内存地址命名的通常是一些可以改变的东西,但内存地址自身是无法改变的,关于这点在p86有个经典例子

public void F(A  a)

{ a = new A(); }

A a = null;

F(a);//这步之后a仍然引用null

 

读取二进制文件末尾的内容时会抛出EOFException,这个异常可以结束用来读取文件中所有数据的循环。文本文件不会,BufferedReader类的方法readLine试图读取超出文本文件末尾的内容时,会返回null,用read读取文本末尾的内容时会返回-1

 

可以用ObjectOutputStream类的writeObject方法向二进制文件输出类对象,用readObject方法从文件中读出对象,但是代码所写入读出的类必须是可串行化的(serializable)(implements Serializable)

要使Serializable接口对代码可用,需要import java.io.*;

 

Java会为它写入ObjectOutputStream类型的流中的每个类对象分配一个串行码,如果多次将同一个对象写入流中,那么第一次写入之后,Java只要写入那个对象的串行码就行了,不需要写入对象数据的整体描述。这种特性使得文件IO更加高效,并使得文件变得更小。用ObjectOutputStream类型的流将其读回时,会将重复的串行号作为对同一个对象的引用返回,这个条件意味着,如果两个变量中包含了对同一个对象的引用,将这些对象写入文件,然后又从中读出来后,读出的两个对象仍然是对同一个对象的引用。因此将对象写入文件并且在稍后将其读出后,对象数据结构中没有丢失任何东西

 

串行码系统使得程序员可以更加容易对写入二级存储器的对象数据进行访问,但是不是所有的类都需要设置成可串行化的

 

ObjectInputStream和ObjectOutputStream来写入和读取数据的最好方式,就是在任何一个文件中只存储一种类类型的数据

 

可以用ObjectWrite将整个数组保存到一个二进制文件之中,然后用objectRead将其读出,这样做的话,如果数组的基类型是类,这个类就应该是可串行化的。这意味着,可以将一个可串行化类的所有数据都存储在单个数组中,然后通过一次ObjectWrite调用将所有数据都输出到一个二进制文件之中

 

applet是设计为嵌套在Web页面中的,从万维网上其他某个地方的另一台计算机上运行,不能期望applet操作目标计算机上的文件,applet所能做的功能是很有限的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值