1.阐述BufferedReader和BufferedWriter的工作原理,

  是否缓冲区读写器的性能恒大于非缓冲区读写器的性能,为什么,请举例说明?

   

bufferedreader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取;

bufferedwriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入;

当char[]中的设置比读取数据的小的话,那么性能比非缓冲区读写器性能小。

2.阐述HashSet与HashMap的异同。

HashMap是K-V对,hashmap底层实现了散列算法,是一种基于关键词的搜索算法,提升hashmap查找速度。hashmap通过hashcode得到一个地址然后equals比较链表中各元素,同时取出对应value值。

2.hashset用hashmap实现Key,实现了set接口,继承collection接口

HashMap:实现map接口,用hash机制存储,不重复,set和map是同一级的。

3.Charset类操作:isSupport()

3.1)通过该类验证平台是否支持一下字符集:

gb2312

GB2312

gbk

GBK

utf-8

utf8

iso8859-1

iso-8859-1



for(String charset : Charset.availableCharsets().keySet()){


    System.out.println(charset);

}

3.2)取出平台默认的字符集


System.out.println(Charset.defaultChaset.name());


4.FileReader.getEncoding();

  new String(,,,,,charset);


5.使用FileInputStream + FileOutputStream / BufferedInputStream + BufferedOuputStream

  实现大文件复制,比较复制效率。

package com.it18zhang_13job.demo;


import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;


/**

 * 

 *使用FileInputStream + FileOutputStream / BufferedInputStream

 *  + BufferedOuputStream 实现大文件复制,比较复制效率。

 * 

 */

public class FileCopy {

    public static void main(String[] args) {

        long startTimeMillis = System.currentTimeMillis();

        File flsou = new File("E:/a.mp3");

        fileInputStreamCopy(startTimeMillis, flsou);

        bufferedInputStreamCopy(startTimeMillis, flsou);

    }




    private static void fileInputStreamCopy(long startTimeMillis, File flsou) {

        File fldec = new File("E:/aCopy.mp3");

        try {

            if (!fldec.exists()) {

                fldec.createNewFile();

            }

            FileInputStream fis = new FileInputStream(flsou);

            FileOutputStream fos = new FileOutputStream(fldec);

            int read = fis.read();

            while (read != -1) {

                fos.write(read);

                read = fis.read();

            }

            fos.flush();

            fis.close();

            fos.close();

            long endTimeMillis = System.currentTimeMillis();

            System.out.println("FileInputStream + FileOutputStream的花费时间:" + (endTimeMillis - startTimeMillis) + "毫秒!");

        } catch (Exception ex) {

            ex.printStackTrace();

        }

    }




    private static void bufferedInputStreamCopy(long startTimeMillis, File flsou) {

        File fldec = new File("E:/aCopy1.mp3");

        try {

            if (!fldec.exists()) {

                fldec.createNewFile();

            }

            FileInputStream fis = new FileInputStream(flsou);

            FileOutputStream fos = new FileOutputStream(fldec);

            BufferedInputStream bis = new BufferedInputStream(fis);

            BufferedOutputStream bos = new BufferedOutputStream(fos);

            byte[] buf = new byte[1024];

            int len;

            while ((len = bis.read(buf)) != -1) {

                bos.write(buf, 0, len);

            }

            fos.flush();

            fis.close();

            fos.close();

            long endTimeMillis = System.currentTimeMillis();

            System.out.println("BufferedInputStream + BufferedOuputStream的花费时间:" + (endTimeMillis - startTimeMillis)

                    + "毫秒!");

        } catch (Exception ex) {

            ex.printStackTrace();

        }

    }

}


6.阐述对象回收的前提条件。

没有任何指向堆空间的指针,则回收