黑马程序员:IO流相关知识总结

来源:互联网 发布:淘宝线下实体店 编辑:程序博客网 时间:2024/05/18 02:01

---------------------- android培训、java培训、期待与您交流! -------------------------

 近期学习了java中IO,了解了IO体系的相关知识,现做一个总结:

I/O类库常使用”流(stream)”这种抽象。所谓”流”是一种能生成或接受数据的,代表数据的源和目标的对象

java.io包中的stream类根据它们操作对象的类型是字符还是字节可分为两大类: 字符流和字节流.,其它字符流都是Reader或Writer的子类。

字符流:Reader和Writer。

字节流:InputStream和OutputStream.

IO的输入输出:

1、输入:Reader, InputStream类型的子类

2、输出:Writer, OutputStream类型的子类

当然字节流和字符流直接可以转换:InputStreamReader, OutputStreamWriter

决定使用哪个类以及它的构造进程的一般准则如下:

第一,考虑最原始的数据格式是什么:是否为文本?

第二,是输入还是输出?

第三,是否需要转换流:InputStreamReader, OutputStreamWriter?

第四,数据来源(去向)是什么:文件?内存?

第五,是否要缓冲:bufferedReader (特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法)

第六,是否要格式化输出:print?

java.io.Reader 和 java.io.InputStream 区别:

java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。

在 Java 中,有不同类型的 Reader 输入流对应于不同的数据源:

FileReader 用于从文件输入;

CharArrayReader 用于从程序中的字符数组输入;

StringReader 用于从程序中的字符串输入;

相 应的也有不同类型的 InputStream 输入流对应于不同的数据 源:FileInputStream,ByteArrayInputStream,StringBufferInputStream,PipedInputStream.

相应的,java.io.Writer 和 java.io.OutputStream 也有类似的区别。

现在举例说一些基本字节流类和基本字符流类。

基本字节流类:

1.FileInputStream和FileOutputStream

这两个节点流用来操纵磁盘文件。这些类的构造函数允许你指定它们所连接的文件。

要构造一个FileInputStream,所关联的文件必须存在而且是可读的。

如果你要构造一个FileOutputStream而输出文件已经存在,则它将被覆盖。

2. BufferInputStream和BufferOutputStream

这些是过滤器流,它们可以提高I/O操作的效率。

基本字符流类:

1.InputStreamReader 和 OutputStreamWriter

用于字节流与字符流之间的转换接口。

当你构造一个InputStreamReader或OutputStreamWriter时,转换规则定义了16位Unicode和其它平台的特定表示之间的转换。

InputStreamReader从一个数据源读取字节,并自动将其转换成Unicode字符

如果你特别声明,InputStreamReade会将字节流转换成其它种类的字符流。

OutputStreamWriter将字符的Unicode编码写到输出流,如果你的使用的不是Unicode字符,OutputStreamWriter会将你的字符编码转换成Unicode编码。

记住:在InputStreamReader和OutputStreamWriter的结尾链接一个BufferedReader和BufferedWriter是一个好主意,可是必须得对BufferedWriter使用flush()方法。

读写文件的编码:
InputStreamReader r = new InputStreamReader(new FileInputStream(fileName), “utf-8″);
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(fileName),”utf-8″);

另外键盘录入的语句为:BufferedReader br=new BufferedReader(new InputStreamReader(System.in))这个语句要牢记的。


------------------ android培训、java培训、期待与您交流! ----------------------