`
白粥若水
  • 浏览: 101098 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

IO学习3rd——Stream"流"基础

阅读更多

到目前为止,我所学习的知识和写的小程序都只是帮助我实现我“自己”所要做的东西,那么怎样得到外部的信息,实现程序与外部文件之间的数据交互了?最近学的Stream“流”可以解决这个问题。

 

     "流"——Stream是IO类库中的一个抽象概念,它代表任何有能力产出数据的数据源对象或是有能力接收数据的数据端对象。"流"屏蔽了实际的IO设备中处理设备中处理数据的细节。

 

     在实际学习和使用"流"的过程中,尽量将其想象成一根管子,管子的一段接着程序(内存),而另一端接着所要处理的文件资源。

 

     流的分类:

                 J2SDK中的位于java.io包的流类型都分别继承了以下4个抽象类:InputSream,OutputStream,Writer,Reader

                 按流的方向的不同:分为输入流和输出流。注意,输入和输出都是站在程序的角度上说的,而不是站在文件的角度。InputSream和Reader都属于输入流,而OutputStream和Writer都属于输出流。任何自InputSream或Reader派生而来的类都含有名为read()的基本方法。同样,任何自OutputStream和Writer派生而来的类都含有名为write()的基本方法。

 

 

                 按处理数据的单位的不同:分为字符流和字节流。顾名思义,字符流和字节流处理数据的单位分别是字符(在java中是2个字节)和字节(8位0/1)。InputSream和OutputStream是字节流。Writer和Reader是字符流。

            

                 按功能的不同:分为节点流和处理流。节点流是最基本的流。与之对应,处理流是使用了装饰器(filter)模式的流,在我们编写程序的时候它给我们提供了相当大的灵活性(但,不可否认,同时也增加了代码的复杂性)。如:DataInputStream,BufferedInputStream,FileInputStream等等,相应的,还有DataOutputStream,BufferedOutputStream,FileOutputStream等等。

                                    处理流是一类特殊的流,它的构造器必须传入一个节点流或处理流。如下面的代码:

package file0313;

import java.io.*;

public class TestBufferedReader {
	public static String read(String fileName) throws IOException{
		//一行一行的读取数据
		BufferedReader in = new BufferedReader(new FileReader(fileName));
		String s;
		StringBuilder sb = new StringBuilder();
		while((s = in.readLine())!=null){
			sb.append(s+"\n");
		}
		in.close();
		return sb.toString();
	}
	
	
	public static void main(String[] args) throws IOException{
		System.out.println(read("src\\file0313\\TestBufferedReader.java"));

	}
	
	

}
/**
 *编译运行查看结果 
 *注意:文件读取完毕记得关闭:in.close();虽然,java垃圾处理器会在一段时间后将之回收
 *用readLine()读取文件内容时必须添加必要的换行符,因为该方法已经将之删除
 *
*/

                 当然,还有一类特殊的流——管道流:PipInputStream,PipOutputStream,PipReader,PipWriter,它们用于任务之间的信息交互,在多线程的应用中有巨大的作用。因为我还没有学习多线程,所以,我现在也不是太清楚。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics