常见流与对象
文件类: File
打印流 PrintStream PrintWriter
管道流 PipInputteStream PipeOutputStream
序列流 SequenceInputStream
对象序列化流 ObjectInputStream ObjectOutputStream
IO流:用于处理设备上的文件
设备:硬盘,内存,键盘录入
IO分类:
1、 根据处理的数据类型不同:字节流和字符流
2、 根据流向不同:输出流和输入流
字符流的由来:因为文件编码的不同,而有了对字符进行高效的字符流对象
原理:其实就是基于字节流去读取字节时,去查了指定的码表。
字节流和字符流的区别:
1、 字节流读取的时候,读到一个字节就返回一个字节。
字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。
2、 字节流可以处理所有类型的数据,如图片, mp3, avi。
而字符流只能处理字符数据。
结论:如果只是处理纯文本数据,就要优先考虑使用字符流,除此之外都要使用字节流。
IO体系
1、 字节流
InputStream(读), OutputStream(写)
2、 字符流
Reader(读), Writer(写)
基本的读写操作:
通常数据都是以文件形式存在
所以就要找到IO体系中可以用于操作文件的流对象
通过名称可以更容易获取该对象。
Reader
|---InputStreamReader
|---FileReader:专门用于处理文件的字符读取流对象
Write
|---OutputStreamWriter
|--FileWriter:专门用于处理文件的字符写入流对象
字符流的缓冲区:
为什么要缓冲区:提高对流的操作效率
原理:其实就是对数组进行封装
对应的对象:
BufferedWriter
特有方法:
newline():跨平台的换行符
BufferedReader
特有方法:
ReadLine():一次读一行,到行标记时,将行标之前的字符数据作为字符型返回。读到末尾时,返回null。
在使用缓冲区对象时,要明确,缓冲的存在是为了增强流的功能而存在,因此在建立缓冲区对象时,要先有流对象存在。
其实缓冲内部就是在使用流对象的方法,只不过加入了数组对数据进行了临时存储。为了提高操作数据的效率。
代码上的体现:
写入缓冲区对象。
//建立缓冲区对象必须把流对象作为参数传递给缓冲区的构造方法。
如:
BufferedWrite bufw = new BufferedWrite (new FileWriter(“Demo.txt”));
Bufw.write(“abcdefg”); //将数据写入缓冲区
Bufw.flush(); //对缓冲区的数据进行刷新,将数据刷到目的地中。
Bufw.close(); //关闭缓冲区,其实关闭的是被包装在内部的流对象。
//读取缓冲对象
BufferedReader bufr = new BufferedReader (new FileReader(“Demo.txt”));
String line = null;
//按照行的形式取出数据。取出的每一行数据不包含回车符。
while ((line = bufr.readLine()) != null)
{
System.out.println (line);
}
bufr.close();
例:通过缓冲区的形式,对文本文件进行拷贝
import java.io.*;
public class Demo3
{
public static void main (String[] args) throws IOException
{
BufferedReader bufr = new BufferedReader(new FileReader("Demo.txt"));
BufferedWriter bufw = new BufferedWriter(new FileWriter("mo.txt"));
String line = null;
while ((line = bufr.readLine()) != null)
{
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufw.close();
bufr.close();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |