常见流与对象 文件类: 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(); } }
|