IO流练习

一、    填空题

  1. Java IO流按操作类型分为     字节流         和 ___字符流________ 。
  2. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数据,   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();
    }

}

缓冲流比文件流快。