使用字符流 必须刷新缓冲区 flush

 

实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如图12-6所示。
 

	/**
	 * 字符流 使用输入流读取一个文件内容到cpu中,然后使用输出流将内容写出到指定位置的外部文件中。 (使用输入输出流进行了文件的复制
	 */
	@Test
	void test02() {
		try {
			Reader isr = new FileReader("m:\\emp.txt");
			Writer osw = new FileWriter("m:\\emp\\emp001.txt", true);

			char[] b = new char[1024];
			int len = isr.read(b);
			while(len!=-1) {
				//打印到控制台
				System.out.println(new String(b));//字符无需指定编码格式
				osw.write(b, 0, len);
				len = isr.read();
			}
			     
			osw.flush();
			if(isr!=null) {
				isr.close();
			}
			osw.close();
			

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

     /**
        * flush() 方法是清空,即清空缓冲区数据,就是说
        * 你用读写流的时候,其实数据是先被读到了内存中,
        * 然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,
        * 因为还有一部分有可能留在内存这个缓冲区中.这时候如果你调用了
        * close方法关闭了读写流,那么这部分数据就会丢失,
        * 所以应该再关闭读写流之前先flush(),显得清空数据.
        */
       //刷新就是将内存(缓冲区)中的数据(是一个字节数组)强制写到磁盘/浏览器/控制台/文件

 

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值