黑马程序员_IO_字符流_zzzx081151的博客-程序员秘密

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

一、IO流
close()和flush()的区别?
1, 调用flush,可以将数据刷到目的地中,流依然存在,可以继续使用。
调用close,可以将数据刷到目的地中,流已被关闭。不能继续使用。最后使用。
2, close不仅刷新缓冲区,还关闭底层资源。


FileReader(file)如果文件不存在,则会抛文件找不到异常。

调用Reader中的read方法,一次读取一个字符。作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1 

调用读取流的read(char[]),将读到的字符存储到字符数组中。返回读取的字符数量,如果已到达流的末尾,则返回 -1 

FileWriter(file)创建对象,运行时就会创建指定的文件,因为写入数据必须先有数据存储的目的。 如果要创建的文件已经存在,则会覆盖。


如果在构造时,传入第二个参数为true,将在原有文件末尾处进行续写。
FileWriter fw = new FileWriter("demo.txt",true);

每一段数据都有一个开始标识和结束标识

FileWriter的内部的缓冲区是字节缓冲区

数据存储单元一次4k

缓冲区是为了提高流的效率而存在的,实际是流在调用系统的的底层资源,缓冲区仅仅是将数据进行了缓冲而已,最终写到硬盘上的还是流。
所以缓冲区的close()方法里面调用的实际是流的关闭动作。

二、字符流
1、字符流的理解,由来和作用
用于操作字符数据的编辑类。
同一类型的数据被不同的编码所解析。将字节流和编码表封装成对象,用于操作字符数据,这就有了字符流对象。

2、通过缓冲区对文本文件进行复制。

public static void copyText() {		
		/*
		 * 复制使用数组缓冲区完成。
		 * 
		 */
		
		//1,创建读取流和写入流。
		FileReader fr = null;
		FileWriter fw = null;
		
		try {
			fr = new FileReader("temp\\CopytTextTest.java");
			fw = new FileWriter("temp\\demo_copy2.txt");
			
			//定义一个缓冲区数组。
			char[] buf = new char[1024];
			
			int len = 0;
			while((len=fr.read(buf))!=-1){
				fw.write(buf,0,len);//读取几个就写几个。
			}
		} catch (Exception e) {
			
			e.printStackTrace();
		}finally{
			if(fw!=null)
				try {
					fw.close();
				} catch (Exception e2) {
					throw new RuntimeException("写入关闭失败");
				}
			if(fr!=null)
				try {
					fr.close();
				} catch (Exception e2) {
					throw new RuntimeException("读取关闭失败");
				}
		}
	}

public static void copyTextByBuffer() throws IOException {
			//1,创建流对象和缓冲区对象。
			FileReader fr = new FileReader("temp\\buf.txt");
			BufferedReader bufr = new BufferedReader(fr);
			
			FileWriter fw = new FileWriter("temp\\buf_copy.txt");
			BufferedWriter bufw = new BufferedWriter(fw);
			
			//2,读取到的一行文本
			String line = null;
			
			while((line=bufr.readLine())!=null){
				bufw.write(line);
				bufw.newLine();
				bufw.flush();
			}
			
			bufw.close();
			bufr.close();	
		}



4、装饰设计模式
装饰模式:为了解决给类的功能进行增强而出现的。
 
Writer
|--TextWriter
|--MediaWriter
 
想要对流对象的功能进行增强,比如提高写入的效率。
使用缓冲技术。
Writer
|--TextWriter
|--BufferedTextWriter
|--MediaWriter
|--BufferedMediaWriter
 
每一个子类这样实现是可以的,但是导致继承体系较为臃肿。
发现其实无论哪个子类需要高效,使用的都是缓冲技术。
干脆将缓冲技术进行单独的描述和封装。
要缓冲区谁,就将谁传给缓冲区。
BufferdWriter
 
class BufferedWriter extends Writer
{
BufferedWriter(Writer w)
{}
}
 
装饰设计模式。
Writer
|--TextWriter
|--MediaWriter
|--BufferedWriter
 
装饰类和被装饰的特点:
1,装饰类中的构造函数需要接受被装饰类。
2,装饰类和被装饰类应该所属于同一个体系。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zzzx081135/article/details/26146003

智能推荐

为什么需要一个接口,一个接口的实现类,而不是直接调用类里的方法_小吴同志你好呀的博客-程序员秘密

作者:Dion链接:https://www.zhihu.com/question/20111251/answer/14012223来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。“接口是个规范”,这句没错。“不如直接就在这个类中写实现方法岂不是更便捷”,你怎么保证这个接口就一个类去实现呢?如果多个类去实现同一个接口,程序怎么知道他们是有关联的呢?既然不是一...

Ribbon负载均衡_一个只会搬砖的女程序猿的博客-程序员秘密

Ribbon1服务调用​ eureka内部继承了ribbon在注入restTemplate这个Bean的时候,声明一个注解@LoadBalanced使用restTemplate调用远程服务,不需要在拼接微服务的URL,以待请求的【服务名】替换IP地址2负载均衡服务端有nginx软件,F5的硬件客户端Ribbon是一个典型的客户端负载均衡器,Ribbon会获取服务的所有地址,...

学习Python基础_python listtype_islq的博客-程序员秘密

下载一个windows下的python环境:Python 2.4.3 Windows installerPython基础篇整理:Jims of 肥肥世家 [email protected]>Copyright 2004,2005,2006 本文遵从GNU 的自由文档许可证(Free Document License)的

关于打包的那些事,你必须记住的三件事,利用Python实现打包exe_49.99%的博客-程序员秘密

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理本文章来自腾讯云 作者:Python进阶者想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需求,资料都已经上传至文件中,可以自行下载!还有海量最新2020python学习资料。点击查看1 前言嘿,各位小伙伴,晚上好呀,我相信各位小伙伴都是python的爱好者。也许我们不一定是专业的程序员,但是我们仍然可以通过代码提高我们的效率,尽量少加

计算机考研面试汇总_普通网友的博客-程序员秘密

队列:只允许在队头删除,在队尾插入的顺序表,队列先进先出eg:排队买饭栈:只允许在栈顶插入和删除的顺序表,栈后进先出。堆:堆分为小根堆和大根堆。(1)每个结点都小于它的左右孩子的值—小根堆;(2)每个结点都大于它的左右孩子的值—大根堆;堆又称为优先队列。循环队列–可以解决假溢出循环队列:牺牲一个存储单元来区分队空和队满,队空:front指针等于rear指针时;队满:(队尾指针+1)余队列长度等于队头指针;...

使用session解决动态刷新的图片验证码_标记图形验证码session_八天一吨水的博客-程序员秘密

我们在爬网站的时候经常会遇到输入图片验证码的情况使用selenium访问网页并截图进行识别找到验证码图片的地址进行访问并保存进行识别第一种方法所见即所得,模仿正常人浏览网页输入验证码的方式,但是有个缺点,使用selenium需要图形化界面,降低了访问效率。第二种方法访问效率高但是也有个致命的缺点,就是验证码是动态刷新的,每次访问验证码的url时验证码都会变化,那么我们该怎么解决呢?这里需要使用session和cookie来处理。

随便推点

QT 多线程下信号和槽的使用_qt 信号槽 信号发送者可以是类么_amyacker的博客-程序员秘密

Qt的信号槽机制可以将任何继承自QObject类的对象捆绑在一起,使不同对象之间能相互通信。QThread继承自QObject,能够发射信号和定义槽函数thread.h#ifndef THREAD_H#define THREAD_H#include <QThread>#include <QString>class Thread : public QThre...

(ros:robot operating system)cob_simulation報錯_五新的博客-程序员秘密

cob_simulation報錯按照官網說明 http://wiki.ros.org/cob_bringup_sim1. git clone https://github.com/ipa320/cob_simulation.git 2. 然後將cob_simulation package放入catking工作空間3. 編譯4. 運行      export ROBOT=co

如何区分abcd类地址_如何判断IP地址是A类B类还是C类_沈忘的博客-程序员秘密

简单的说:A类网络的IP地址范围为:1.0.0.1-126.255.255.254;B类网络的IP地址范围为:128.1.0.1-191.255.255.254;C类网络的IP地址范围为:192.0.1.1-223.255.255.254具体解释:1.A类IP地址一个A类IP地址由1字节(每个字节是8位)的网络地址和3个字节主机地址组成,网络地址的最高位必须是“0”,即第一段数字范围为1~126。...

Python处理txt数据实例_hust_a的博客-程序员秘密

现在有一个具体的案例是这样的:CST电磁仿真软件得到一些txt数据在origin_data文件夹中。需要其中的一些数据来通过origin软件绘制曲线分析一些问题,而且需要里面的所有数据曲线显示在同一个图形中。如果通过手动将txt数据一一复制到origin(或excel)中,txt没有整列复制功能,所有手动复制很麻烦。通过Python脚本提取相关数据就比较容易了。首先分析一下txt数据格式:格式1:格

macro `AM_PROG_LIBTOOL’ not found in library_yanyanyanyan的博客-程序员秘密

apt-get install libtoolmake还是报错../../libtool: line 807: X--tag=CC: command not found../../libtool: line 840: libtool: ignoring unknown tag : command not found../../libtool: line 807: X

undefined macro: AM_CONFIG_HEADER solution_tmjdone的博客-程序员秘密

autoconf error: possibly undefined macro: AM_CONFIG_HEADERrun following command:aclocal ; autoheader; automake ; autoconf

推荐文章

热门文章

相关标签