[b]20.1 Streams Overview[/b]
java.io有两个主要的部分:字符流和字节流。字符时16 bit的UTF-16字符,而字节是8 bit的。I/O要么是基于文本的要么是基于二进制的。基于文本的I/O要利用可识别的字符流,比如程序的源代码。基于二进制的I/O要利用二进制数据流,比如图片文件。字符流用于基于文本的I/O,而字节流用于基于二进制数据的I/O。尽管字节流可以用来处理7-bit或8-bit字符,但是它还是不适合处理字符,因为有些字符相关的问题在字节流看来是没有意义的。字节流被叫做input stream或者output stream; 而字符流被叫做reader或者writer。几乎所有的input stream都有相应的output stream。input stream/output stream拥有的功能reader/writer都具有,反之亦然。
由于不同流功能上有重叠,我们不加以细分时,指的是所有的流。但我们讨论input stream/output stream时,我们指的是字节流; 讨论reader/writer时,我们指的是字符流。比如,我们讨论Buffered Stream时,我们指的是整个BufferedInput Stream, BufferedOutputStream, BufferedReader 和 BufferedWriter。当我们讨论Buffered字节流时,我们指的是BufferedInputStream和BufferedOutputStream。当我们讨论Buffered字符流时,我们指的是BufferedReader和BufferedWriter。
java.io包中的接口和类大致分为5组:
1:创建字节流和字符流的通用类。从20.2到20.4讲述input stream/output stream, reader/writer和相互转换的类。
2:一组描述不同流类型的类。20.5讲述filtered stream, buffered stream, piped stream。其中还会讲述它们的一些实例,比如支持行数的reader和词法分析流。
3:20.6讲述支持内置类型和string的流类和接口。
4:20.7讲述支持系统独立和文件交互的类和接口。
5:20.8讲述支持对象序列化的类和接口。通过这种机制,我们可以将对象变成二进制流,并且通过二进制流重新构建对象。
有些输出流类使用java.util.Formatter实例支持格式化输出。通过将输入流和java.util.Scanner绑定到一起,我们可以得到格式化输入。在Chapter22将讲述格式化输入和输出。
类似,当一个方法中传入null引用或者数组越界,NullPointerException和IndexOutOfBoundsException将会抛出。在这种情况下,即使没有异常发生,也要明确记录。
本章中所有代码用到java.io中的类。每个例子都要import java.io.*, 即使在代码中没有明确写出。
java.io有两个主要的部分:字符流和字节流。字符时16 bit的UTF-16字符,而字节是8 bit的。I/O要么是基于文本的要么是基于二进制的。基于文本的I/O要利用可识别的字符流,比如程序的源代码。基于二进制的I/O要利用二进制数据流,比如图片文件。字符流用于基于文本的I/O,而字节流用于基于二进制数据的I/O。尽管字节流可以用来处理7-bit或8-bit字符,但是它还是不适合处理字符,因为有些字符相关的问题在字节流看来是没有意义的。字节流被叫做input stream或者output stream; 而字符流被叫做reader或者writer。几乎所有的input stream都有相应的output stream。input stream/output stream拥有的功能reader/writer都具有,反之亦然。
由于不同流功能上有重叠,我们不加以细分时,指的是所有的流。但我们讨论input stream/output stream时,我们指的是字节流; 讨论reader/writer时,我们指的是字符流。比如,我们讨论Buffered Stream时,我们指的是整个BufferedInput Stream, BufferedOutputStream, BufferedReader 和 BufferedWriter。当我们讨论Buffered字节流时,我们指的是BufferedInputStream和BufferedOutputStream。当我们讨论Buffered字符流时,我们指的是BufferedReader和BufferedWriter。
java.io包中的接口和类大致分为5组:
1:创建字节流和字符流的通用类。从20.2到20.4讲述input stream/output stream, reader/writer和相互转换的类。
2:一组描述不同流类型的类。20.5讲述filtered stream, buffered stream, piped stream。其中还会讲述它们的一些实例,比如支持行数的reader和词法分析流。
3:20.6讲述支持内置类型和string的流类和接口。
4:20.7讲述支持系统独立和文件交互的类和接口。
5:20.8讲述支持对象序列化的类和接口。通过这种机制,我们可以将对象变成二进制流,并且通过二进制流重新构建对象。
有些输出流类使用java.util.Formatter实例支持格式化输出。通过将输入流和java.util.Scanner绑定到一起,我们可以得到格式化输入。在Chapter22将讲述格式化输入和输出。
类似,当一个方法中传入null引用或者数组越界,NullPointerException和IndexOutOfBoundsException将会抛出。在这种情况下,即使没有异常发生,也要明确记录。
本章中所有代码用到java.io中的类。每个例子都要import java.io.*, 即使在代码中没有明确写出。