黑马程序员——浅析IO
------- android培训、java培训、期待与您交流! ----------
黑马程序员——浅析IO
流的分类:
按流动方向:输入流,输出流
按处理数据的单位:字节流(字节或二进制对象,不会使用到缓冲区),字符流(字符或字符串)
按功能的不同:节点流,处理流
节点流:直接操作数据设备,例如:磁盘或一块内存空间。
处理流:通过操作节点流,从而间接完成输入或输出功能的流。处理流的存在是建立在一个已经存在的输入流或输出流的基础上的。
操作流的的步骤:
1、使用FIle类找到一个文件对象,得到IO操作的源或对象
2、通过字节流或字符流的子类创建对象,得到IO操作通道。
3、进行读或写的操作、
4、关闭输入/输出
缓冲区:
计算机访问外部设备要比直接访问内存慢得多,若我们每次write方法调用都是直接写到外部设备(比如磁盘上的一个文件)CPU就要花费更多时间去等待外部设备;我们可以开辟一个内存缓冲区,程序每次的write方法都是写到这个内存缓冲区中,只有这个缓冲区装满之后,系统才将这个缓冲区的内容一次集中写到外部设备。
好处:高效提高了CPU的使用率;write方法并没有马上真正写入到外部设备,有机会回滚部分写入的数据。
转换流:
OutputStreamWriter:将字节输出流对象转成字符输出流对象
InputStreamReader:将字节输入流转成字符输入流对象。
原因:无论使用字节流还是字符流实际上在内存中最终都是通过字节的形式来操作流的。,所以并没有字符流转换字节流。
内存流:先将数据写到内存中去,然后再从内存中读取出来,提升了性能。
类:ByteArrayInputStream ByteArrayOutputStream
打印流:PrintWriter PrintStream
都是输出流,分别针对字符和字节
PrintWriter重载print()方法参数不能为空
PrintStream重载println()参数可为空,有自动flush功能。
都是用于多种数据类型的输出。
标准流: 标准输入流:System.in; 标准输出流:System.out
Scanner(简单文本扫描器):
Scanner(File source)构造一个新的Scanner,他生成的值是从指定文件扫描的,实现了Iterator接口。
缓冲流:缓冲流要“嵌套”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写效率,同时增加了新方法。
BufferedWriter(Writer out) BufferedReader(Reader in);
BufferedInputStream(InputStream in) BufferedOutputStream(OutputStream out);
BufferedReader提供了readLine用于读取一行字符串
BufferedWriter提供了newLine()用于写入一个行分隔符。(\r\n)
合并流:(SequenceInputStream)将两个文件的内容合并成一个文件
SequenceInputStream(InputStream s1,InputStream s2)