欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java I/O

程序员文章站 2022-06-10 23:14:20
...
在具体分析某一种流的前要先知道下面一些信息:
  4个抽象类也是流的4个超类,其它所有的相关类都是继承这几个类
  字节
  InputStream , OutputStream
  字符
  Reader , Writer
  除了知道这几个超类外还需要只要流相关的几个重要的接口
  Flushable  提供将缓存中数据写入底层流,是输出流的重要部分
  Readable  是reader 要实现的接口
在弄清楚上面这些,再去看流就会清晰了很多,无论是字节的输入输出,还是字符的输入输出,还是字接的输入与字符的输入。。。等等都有很多相似度。
  从宏观角度,一个是以字节的形式进行信息的传输,一个是以字符的形式进行信息传输,都有输入输出功能。
  第一:字节流
      1,输入流
           在这里有3个重要的InputStream 实现类,这3个也是大家经常用到的
            1, FileInputStream  文件输入流,它是直接继承InputStream 的。
            2, FilterInputStream  过滤流,它也直接继承了InputStream ,这个流大家似乎有些陌生,但是它的2个子类大家一定非常熟悉
               <1>BufferedInputStream 缓存流,把拿到的数据先存到缓存中,最后在一起提交,提高效率
               <2>DataInputStream 从最底层读取数据,也叫做二进制流
     2,输入流也有3个重要的实现类,跟上面的类似
第二:字符流
      1,输入流
           Reader 实现Readerable接口
      它是以字符的形式写入数据,重要的2个实现类是
          1,FileReader  (继承InputStreamReader[该类又继承了Reader])
          2,  BufferedReader 直接继承了Reader
      2, 输出流 跟输入流类似,把Reader改为Writer即可
对于上面2点,我没有写的非常详细,是因为他们之间大部分都是一样的,只是个别地方出现一点差异,最重要的就是File,Buffered,Data这些字样,
由于读取数据的方式有很多种,需要根据不同的条件来进行筛选,如果需要读取的是一些不含中文的一些字母,数量不多就可以用不同的输入输出字节流,
如果需要从文件中读取,或者写到文件中就需要文件流,当读取的数量较大的时候就需要用缓存流,字符流比较适合最小单位是字符的数据存储方式的数据。
我用一个测试类来写下上面几个常用流。
public class BufferedTest {

	
	public static void main(String[] args) {
		BufferedTest test=new BufferedTest();
		test.test1();
		test.test2();

	}
	//test1 BufferedInputStream and BufferedOutputStream
	public void test1(){
		try {
			InputStream in=new FileInputStream(new File("d:/intStream.txt"));
			byte [] b=new byte[100];
			BufferedInputStream bi=new BufferedInputStream(in);
			bi.read(b);
			OutputStream out=new FileOutputStream(new File("d:/outStream.txt"));
			BufferedOutputStream bo=new BufferedOutputStream(out);
			bo.write(b);
			//将缓存中数据写如文件
			bo.flush();
			
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
   //test2 BufferedReader and BufferedWriter
	public void test2(){
		try {
			Reader reader=new FileReader(new File("d:/reader.txt"));
			BufferedReader br=new BufferedReader(reader);
			char a[]=new char[100];
			br.read(a);
			FileWriter fw=new FileWriter(new File("d:/writer.txt"));
			BufferedWriter bw=new BufferedWriter(fw);
			bw.write(a);
			//将缓存中数据写如文件
			bw.flush();
			
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
}
相关标签: i/o