标签:
Java输入输出大致可以分为两类,流式操作与非流式操作,流式操作主要关注与文件内容的读写,非流式操作主要用于文件在磁盘上的管理。下面首先学习流式数据操作。
与c++类似,java中也提供了流的概念来处理输入输出(I/O)。Java中,可以从其中读入一个字节序列的对象称为输入流,可以向其中写入一个字节序列的对象称为输出流。输入输出流都是对象,这一类对象需要绑定特定的字节来源和目的地,可以是标准输入输出(键盘和屏幕),文件或者网络,甚至可以是内存块。
抽象类InputStream和OutputStream构成了输入输出(I/O)类层次结构的基础。这两个类主要用来处理字节输入输出,即继承了这两个类的子类对象主要是用来处理字节流的。通常情况下,处理字符的需求更为常见,为了处理字符,java中提供了Reader和Writer两个抽象类来处理字符输入输出。
InputStream类的基础方法是read()方法,这个方法从输入源中读入一个字节,返回值即为读入的字节,返回类型为int。具体从哪种读入源读入取决于具体实现抽象类的具体类型,例如FileInputStream对象从绑定的文件中读入字节,System.in对象从标准输入(键盘)读入字节。InputStream还有其他方法,例如读入一个字节序列,跳过n个字节等。OutputStream类的基础方法是write(int n),用于向输出流中写入一个字节。以这两个抽象类为基础,java中有一个完整的流类家族,用来处理各种各样的输入输出问题。如下图所示:
类似于InputStream与OutputStream,Reader与Writer也有两个基本方法,分别是read与write,不同之处在于这两个函数的输出与输入是两字节的Unicode码元,而不是一个字节。同时也有一个完整的类家族来处理各种字符输入输出问题。类层次结构为:
输入输出类中有一些通用的方法,例如close,flush等等。这些方法主要是流类通过实现接口获得的,这些接口主要包括closeable,flushable,Readable,Appendable等。
java中的各种输出输出流类完成各种各样的功能,例如FileInputStream实现文件的流式输入,DataInputStream实现java基本数据类型的输入,它们各自完成自己的功能,其他的流类无法使用其他流类的功能,为了实现各种功能的组合,例如实现利用度基本数据类型的方式读一个文件,此时可以使用:
FileInputStream fin=new FileInputStream(“file.data”);
DataInputStream din=new DataInputStream(fin);
double s=din.readDouble();
当需要从标准输入中利用直接读java基本数据类型的是,可以使用:
DataInputStream din=new DataInputStream(System.in);
double s=din.readDouble();
利用这种嵌套流过滤器(组合流过滤器)的方式,可以实现组合各种各样的功能。同时还可以用来沟通字节处理流与字符处理流。如下:
BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream(“file.tax”),”UTF-8”)); //只是一种展示
关于字节流与字符流,字节流可以处理各种各样的文件,例如音频和图片,而字节流只能实现处理文本。
标签:
原文地址:http://www.cnblogs.com/libs5510/p/5229056.html