黑马程序员____基础加强____[IO流个人总结](一)

2014-11-24 02:45:39 · 作者: · 浏览: 4

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

IO流体系的知识梳理与深化,用EditPlus以代码格式编写

IO流(重点)
	设备之间的数据传输,由于会操作系统底层设备,io操作会抛 IOException,编程时要进行处理
	要认清"流"的概念,read 是获取数据到流中,write是将流中的数据写出去
主要体系:	抽象基类,派生出的子类都是以父类作为后缀
----------------------------------	

IO继承体系"*"为较常用; "♂"&"♀"为成对使用
字符流继承体系

	//Reader 实现接口Closeable, Flushable,	提供close()和flush()功能
	Reader	-->InputStreamReader "*"转换流又称桥梁流-->FileReader	"*"//由此可见字符流在底层调用了字节流
			-->BufferedReader	"*"缓冲&装饰-->子类: LineNumberReader 行操作
			-->CharArrayReader 操作字符数组
			-->StringReader		操作字符串
	//Writer 实现接口 Closeable, Flushable, Appendable	多一个append()	Appendable接口出现于1.5版本
	Writer	-->OutputStreamWriter "*" -->FileWriter	"*"	//append方法用于添加字符
			-->BufferedWriter	"*"	
			-->PipedWriter	-->PrintWriter 打印流 "*"
			-->CharArrayWriter 
			-->StringWriter

字节流继承体系:
	//InputStream 实现Closeable接口		close()
	InputStream	-->FileInputStream "*"
				-->FilterInputStream 过滤流-->BufferedInputStream 字节流缓冲区(装饰)
										   -->DataInputStream 操作基本数据类型
				-->SequenceInputStream	合并流
				-->ObjectInputStream"♀"	序列流	对象反序列化,将对象数据读取进流
				-->PipedInputStream	"♂"	管道流,发送
				-->ByteArrayInputStream	操作字节数组
	//OutputStream 实现Closeable, Flushable接口	close() & flush()
	OutputStream-->FileOutputStream "*"
				-->FilterOutputStream-->BufferedOutputStream
									 -->PrintStream 打印流
									 -->DataOutputStream
				-->ObjectOutputStream "♂"对象序列化 持久化,对象需实现 Serializable "标记接口"
				-->PipedOutputStream"♀"	管道流,接收
				-->ByteArrayOutputStream

IO体系外其它相关类
	File"*"		操作文件和目录
	RandomAccessFile	随机读写
	Properties 该类是 Hashtable 的子类,位于java.util包中

-----------------------------------
字符流
	FileReader 读入步骤: new FileReader(File)/*已有文件*/-->(循环)int read() ||int read(char[])-->操作--(-1 循环结束)-->close()
	FileWriter 写出步骤: new FileWriter(File)/*创建|覆盖*/-->(循环)write(...)-->flush()-->close()
				文件续写: new FileWriter(File,true) ...	//将true改为false就是覆盖原文件
				字符文件的copy就是循环的read()和write()
	字符流缓冲区:用于提高效率 "装饰类"
	BufferedReader	读入: new BufferedReader(new FileReader(File))-->(循环)String ReadLine()-->操作--(null 循环结束)-->close()
		子类: LineNumberReader 使用方法: new LineNumberReader(new FileReader(File)) 
		//.setLineNumber(int n)设置行号,从第n行开始readLine() || .getLineNumber()获取行号
	BufferedWriter	写出: new BufferedWriter(new FileWriter(File))-->(循环)write(linne)-->newLine()-->flush()-->close()
					使用缓冲区能够减少读写的次数,提高效率
设计模式之--"装饰设计模式"Decorator
	当想要对已有对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,提供加强功能,自定的该类称为装饰类
	readLine()是read()方法的增强,BufferedReader是FileReader类的增强类
	相比继承扩展,装饰模式降低了两个类之间的关联度,避免了继承体系的臃肿,具有更高的灵活性和扩展性

----------------------------------------------------------------
字节流

	FileInputStream	 读入:new FileInputStream(File)-->(循环)int read() || read(byte[])-->操作--(-1 循环结束)-->close()
		读入的第三种方式: new FileInputStream(File)--> new byte[ fis.available()]-->read(byte[])-->close()
		//available返回该文件对象有效的字节数,不使用循环而是一次性写入,文件较大时要慎用(JVM内存分配默认为64m)
		在读写文件时,使用数组缓冲与单字节读写相比往往有数十倍的性能提升,可以使用"模板模式"来对比三种方法的效率
		一般来说缓冲区大小为1M左右时效率是最高的,当然,不同系统环境也可能有差异
	FileOutputStream 写出:new FileOutputStream(Fil