一、 填空题
- Java IO流按操作类型分为 字节流 和 ___字符流________ 。
- 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数据, read 方法给程序提供了一个从输入流中读取数据的基本方法。
3. read方法从输入流中顺序读取源中的单个字节数据,该方法返回字节值(0-255之间的一个整数),如果到达源的末尾,该方法返回 -1 。
4.Java系统的标准输入对象是System.in,标准输出对象有两个,分别是标准错误输出System.err和标准输出 ______System.out______________。
5.Java IO体系中,_____InputStream_______________是字节输入流,不仅提供了存取所有Java基础类型数据(如:int,double 等)和String的方法,也提供了提供存取对象的方法。
6. Java IO体系中,_____OutputStream_______________是字节输出流,提供了可以存取所有Java基础类型数据(如:int,double 等)和String的方法,但没有提供存取对象的方法。
二、 简答题
1.输入流和输出流的联系和区别,字符流和字节流的联系和区别
输入流是得到数据,输出流是输出数据。
字符流和字节流是流的一种划分,按处理照流的数据单位进行的划分。
两类都分为输入和输出操作。
在字节流中输出数据主要是使用OutputStream完成,输入使InputStream
在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成
2.列举常用的字节输入流和字节输出流并说明其特点,至少5对。
FileInputStream FileOutputStream
从文件系统中的某个文件中获得输入字节
ObjectInputStream ObjectOutputStream
对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
FilterInputStream FilterOutputStream
包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。
BufferedInputStream BufferedOutputStream
ByteArrayInputStream ByteArrayOutputStream
包含一个内部缓冲区,该缓冲区包含从流中读取的字节。
3.说明缓冲流的优点和原理
原理:缓冲流在进行读写文件时会提供一个缓冲区数组(内存中),在读文件时可根据需要从包含的输入流填充该内部缓冲区,一次填充多个字节或字符。在写文件时输出缓存流调用write方法将数据写在缓冲区中,等到缓冲区满了之后才将数据发送到目的地(文件或磁盘).所以写入缓冲区的数据太小时,就经常会写不到指定文件中,所以最好在调用write方法后再调用flush方法,强制的将缓冲区中的数据发送到流中,而不必等到缓冲区满.
优点:相对于基本流字节或者字符流是直接对目的地进行读写的,相当于读一个写一个效率比较低。而使用缓冲流避免了多次访问文件,提高了读写速度。
三、 编码题
1.实现字符串和字节数组之间的相互转换。必如将字符串“北京最课程bjzkc”转换为字节数组,并将字节数组再转换回字符串。
package com.zuikc; import java.io.IOException; public class TestConvert { public static void main(String[] args) throws IOException { // 准备一个字符串 String contents = "北京最课程bjzkc"; // String---byte [] byte[] buf = contents.getBytes(); // byte[]----String String contents2 = new String(buf, 0, buf.length); System.out.println(contents2); } }
2.分别使用文件流和缓冲流复制一个长度大于100MB的视频文件,并观察效率的差异。
package com.zuikc; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; /** * 分别使用文件流和缓冲流复制一个长度大于100MB的视频文件,并观察效率的差异 */ import java.io.FileWriter; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { // 缓冲流 demo1(); // 文件流 // demo2(); } private static void demo1() throws FileNotFoundException, IOException { File f = new File("E:\aaa\1.wmv"); FileInputStream fis = new FileInputStream(f); File nf = new File("E:\bbb\2.wmv"); FileOutputStream fos = new FileOutputStream(nf); int len = 0; byte b[] = new byte[2048]; while ((len = fis.read(b)) != -1) { fos.write(b); } fos.flush(); fos.close(); fis.close(); } private static void demo2() throws FileNotFoundException, IOException { FileReader fr = new FileReader("E:\aaa\1.wmv"); BufferedReader br = new BufferedReader(fr); FileWriter fw = new FileWriter("E:\bbb\2.wmv"); BufferedWriter bw = new BufferedWriter(fw); String len = null; while ((len = br.readLine()) != null) { bw.write(len); } bw.flush(); bw.close(); br.close(); } }
缓冲流比文件流快。