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

一、流的分类
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:在使用了处理流包装了底层节点流之后,关闭输入/输出流资源时,只要关闭最上层的处理流即可。因为关闭处理流同时,系统会自动关闭被处理流包装的节点流。
暂时写这么多,第一篇都是很基础的知识。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值