您的位置:首页 > 编程语言 > Java开发

IO输入输出流学习笔记(第一篇)(JAVA)

2015-04-21 10:49 330 查看
一、流的分类

1.输入流与输出流:按方向来分。我们说的方向是站在程序的角度(内存)。

2.字节流与字符流:按操作的数据单元来分,字节流操作8位的字节,字符流操作16位的字符。字节流主要是InputStream和OutputSream作为基类,字符流是Reader和Writer。

3.节点流与处理流:按功能来分,可以从一个特定IO设备(如磁盘、网络)读/写数据的流称为节点流。而处理流可以理解为将一些节点流封装一起形成的流(高级流)。处理流可以帮助我们在进行输入和输出操作更为简单,执行效率更高,并且可以屏蔽底层设备上节点流的差异。

首先介绍两个流基类:

InputStream/Reader:所有流的基类(abstract),前者是字节输入流,后者是字符输入流。

OutputStream/Writer:同上,前者是字节输出流,后者是字符输出流。

因为以上四个类都是抽象类,不能创建实例,可以用FileInputStream和FileReader来读取文件。参考一下代码示例:

</pre><pre name="code" class="java">package Kobe;
import java.io.*;

public class FileInputTest {
public static void main(String[] args) throws IOException {
//		File fff = new File("E:\javastudy\eclipse\JZ\src\Kobe\TestHas.java");
FileInputStream fis = new FileInputStream("E:/javastudy/eclipse/JZ/src/Kobe/Leaf.java");
byte[] bb = new byte[1024];
int count=0;
while((count = fis.read(bb)) >0 ) {
System.out.println(new String(bb, 0, count));
//			System.out.println(bb);
}
//		while(fis.read() >0) {
//			System.out.print((char)fis.read());
//		}
//
fis.close();
}
}
E:\javastudy\eclipse\JZ\src\Kobe\TestHas.java对于new FileInputStream里传入的参数就是典型的节点流,并且注意使用“/”与使用“\\”原理相同,改代码是将文件Leaf.java文件内容读出来并打印到控制台。

注意fis.close()用来关闭“管道”,因为程序里打开的文件资源不属于内存里的资源,所以JVM的垃圾回收机制不会回收该资源,所以应该显示地条用close来关闭流。但如果采用try catch来写程序的话就不用再显示地调用close()方法,因为其是自动关闭的。(Windows平台的换行符是“\r\n”,Linux/Unix/BSD都是“\n”)。

二、处理流

处理流的好处,一是可以简化代码,二是可以隐藏(屏蔽)底层设备上节点流的差异。使用处理流遵循一条思路,即使用处理流来包装节点流,程序通过处理流来执行输入与输出操作,让节点流来与底层的IO设备、文件交互。

处理流:使用流的构造器参数不是一个物理节点(节点流),而是一个已经存在的流。

节点流:所有节点流的构造器参数都是直接以物理IO节点为参数。

以下代码就是使用PrintSream处理流来包装OutputStream:

package Kobe;
import java.io.*;

public class PrintStreamTest {
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("James.txt");
PrintStream ps = new PrintStream(fos);
ps.println("I am Paul Walker");
ps.println(new PrintStreamTest());
}catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
新建一个James.txt文件,将fos作为参数传到PrintSream对象(包装),fos这里可以理解为是已经存在的流,而James.txt是一个文件就是节点流。我们经常使用的System.out的类型就是PrintSream。

Tip:在使用了处理流包装了底层节点流之后,关闭输入/输出流资源时,只要关闭最上层的处理流即可。因为关闭处理流同时,系统会自动关闭被处理流包装的节点流。

暂时写这么多,第一篇都是很基础的知识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: