黑马软件工程师_Java IO之OutputStream、InputStream、Writer、Reader类的使用

黑马程序员_Java IO之OutputStream、InputStream、Writer、Reader类的使用

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

 

 

            在Java IO中提供了两种类型的操作流:

 

                   -->字符流:以字符为单位的操作流

                   -->字节流:以字节为单位的操作流

 

                  每种类型的流又可细分为输入流和输出流,下面就对其最大父类做一分析。   

    

public abstract class OutputStream
extends Object
implements Closeable, Flushable
public abstract class InputStream
extends Object
implements Closeable
public abstract class Writer
extends Object
implements Appendable, Closeable, Flushable
public abstract class Reader
extends Object
implements Readable, Closeable

 

  从四个类的定义可以发现其都被定义为抽象类,即不能通过自身进行对象的实例化操作,要想使用这四个类必须依靠子类对其进行实例化,即通过对象的多态性。

  下面分别用字符流和字节流从一个文件中读取一串Hello World!!!,并将其输出到显示器上:

     

       1.通过字节流进行操作:

 

package heima.inputstream.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class InputStreamTest {
	public static void main(String[] args) {
		
		// 实例化一个文件,准备从其中读取数据
		File file = new File("F:" + File.separator + "source.txt");
		InputStream input = null;
		OutputStream out = null;
		byte[] b = new byte[14];
		try {
			
			// 通过对象多态性为InputStream类进行实例化
			input = new FileInputStream(file);
			
			// 指定输出的位置为显示器
			out = System.out;
			
			// 将文件中的内容读到一个字节数组当中
			input.read(b);
			
			// 输出一个字节数组
			out.write(b);
			
			// 关闭输入输出流
			input.close();
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

  

 

          1.通过字节流进行操作:

 

package heima.reader.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class ReaderTest {
	public static void main(String[] args) {
		// 实例化一个文件,准备从其中读取数据
		File file = new File("F:" + File.separator + "source.txt");
		Reader reader = null;
		char[] c = new char[14];

		try {

			// 通过对象多态性为Reader类进行实例化
			reader = new FileReader(file);

			// 将文件中的内容读取到一个字符数组
			reader.read(c);
             
			// 关闭输入流
			reader.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(new String(c));
	}
}

 

 

       字节流和字符流在使用上非常相似,就二者的不同进行简单的比较:

 

                --> 字节流在使用时并不会用到缓冲区,即内存,直接就是操作文件

                      本身,而字符流在使用时使用了缓冲区,通过缓冲区再对文件进

                      行操作。因为在字符流的操作中,所有的字符都是在内存中形成

                      的,输出前会将内容暂时保存在内存之中。

 

                --> 所有的文件(包括图片、声音、视频等各种文件)都是按照字节存

                      贮的,在传递的过程中也是按照字节流的形式进行传递的;而字

                      符只有在内存中才会形成。

 

 

 

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

 

详细请查看:http://edu.csdn.net/heima