流是java中传送数据的通道,或者说是一种运行状态。

流根据流向,分为输入输出流

流根据处理单元,分为字节流和字符流:

         上述两两组合有四种方式,其中输入输出对应的参照物是程序,输入就是将文件输入到程序里(程序在读),输出就是程序把数据输出到文件上(程序在写)。以下是我从网上找的流的继承关系图(够用就行),字节流由stream结尾,字符流由reader,writer结尾。


抽象类,上面的继承图很好的表示各种常用流的继承关系,其中InputStream和OutputStream与Writer,Reader是抽象类,还有就是字体颜色较为暗淡的FIlterOutputStream和FilterInputStream类也是其余则是实体类。

字节流:

    先来将一下字节流,字节流是以字节为读取单位来进行读和写操作的。字节分为以下两种:

普通文件字节流(FileOutputStream和FileInputStream)

以下两段代码做一下简单介绍:

这是一个复制的功能,是以is.read()一次读一个字节的方式

        InputStream is = new FileInputStream(srcString);
		OutputStream os = new FileOutputStream(destString);

		int by = 0;
		while ((by = is.read()) != -1) {
			os.write(by);
		}

		os.close();
		is.close();

同样的赋值,但使用的是一次读一个字节数组的方式 

InputStream is = new FileInputStream(srcString);
		OutputStream os = new FileOutputStream(destString);

		byte[] bys = new byte[1024];
		int len = 0;
		while ((len = is.read(bys)) != -1) {
			os.write(bys, 0, len);
		}

		os.close();
		is.close();

高效字节流(此字节流带有缓冲区BufferedOutputStream和BufferedInputStream)

高效字节流除了构造对象不同外,用法与普通字节流相同,毕竟他说我底层使用的依然是基本的流。

字符流:

字符流肯定是以读取字符为读写方式的,他是以字符作为单位来进行读写的,字符流只能用来读写文本,不能读写其他数据。为什么呢?因为字符流 = 字节流 + 编码表,即使同为文本,编码表不同,也会也会发生乱码现象。

普通字符流

由于Writer和Reader的子类转换流InputStreamReader和OutputStreamWriter的名称过长,所以会使用他们的子类FileReader和FileWriter。

  一次读取一个字符:(构造对象和关闭资源就自己看api吧)

       一次一个字符
		int ch = 0;
		while ((ch = fr.read()) != -1) {
            fw.write(ch);
	    }

  一次读取一个字符数组:

// 一次一个字符数组
		char[] chs = new char[1024];
		int len = 0;
		while ((len = fr.read(chs)) != -1) {
			fw.write(chs, 0, len);
			fw.flush();
		}

同理,类似于高效字节流,字符也有字符缓冲流:

同样的复制,同样的一次读一个字符和一次读一个字符数组。但但字符缓冲流还有第三种:

                                                                              一次读一个字符串,并用newLine()和flush()来换行和刷新

     // 读写数据
		String line = null;
		while ((line = br.readLine()) != null) {
			bw.write(line);
			bw.newLine();
			bw.flush();
		}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值