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

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


2.阐述HashSet与HashMap的异同。


3.Charset类操作:isSupport()

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

        gb2312

        GB2312

        gbk

        GBK

        utf-8

        utf8

        iso8859-1

        iso-8859-1


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


4.FileReader.getEncoding();

  new String(,,,,,charset);


5.使用FileInputStream + FileOutputStream / BufferedInputStream + BufferedOuputStream

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


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


答:

1,

BufferedReader和BufferedWriter底层仍然采用的字符输入输出流,只是加入了缓冲技术。

使得在操作字符数据的时候,先将数据输入输出到缓冲区中,然后批量输入输出到物理文件,从而加快效率,降低磁盘IO压力。

缓冲区读写器的性能一定恒大于非缓冲区读写器的性能,因为批量导入导出避免了流对物理文件的频繁访问,从而提高IO性能。

2,

HashSet和HashMap的异同

同:都是集合,可以存储对象,并且HashSet底层采用的就是HashMap,使用的是HashMap的key部分,此外,两者都具有不重复的特点,都采用了哈希机制进行存储。

异:HashSet实现Set接口,Set继承Collection接口;HashMap实现Map接口,而Collection和Map是同一级的,

3,

package com.it18zhang.day13;


import java.nio.charset.Charset;


public class CharsetDemo {


public static void main(String[] args) {

// //取出支持的字符集

// for(String ch : Charset.availableCharsets().keySet()){

// System.out.println(ch);

// }

// System.out.println("-----------------");

System.out.println("gb2312\t::"+Charset.isSupported("gb2312"));

System.out.println("GB2312\t::"+Charset.isSupported("GB2312"));

System.out.println("gbk\t::"+Charset.isSupported("gbk"));

System.out.println("GBK\t::"+Charset.isSupported("GBK"));

System.out.println("utf-8\t::"+Charset.isSupported("utf-8"));

System.out.println("utf8\t::"+Charset.isSupported("utf8"));

System.out.println("iso8859-1\t::"+Charset.isSupported("iso8859-1"));

System.out.println("iso-8859-1\t::"+Charset.isSupported("iso-8859-1"));

System.out.println("default Charset is\t"+Charset.defaultCharset().displayName());

}



}


4,

package com.it18zhang.day13;


import java.io.FileNotFoundException;

import java.io.FileReader;


public class FileReaderEncodingDemo {


public static void main(String[] args) throws Exception {

FileReader  fr = new FileReader("d:/aa.txt");

System.out.println("文件编码为"+fr.getEncoding());

String str = new String("a中国b人".getBytes(),"utf-8");

System.out.println(str);

String str1 = new String("a中国b人".getBytes(),"gbk");

System.out.println(str1);

}


}

5

package com.it18zhang.day13;

import java.io.*;

public class CopyFileDemo {


public static void main(String[] args) throws Exception {

FileInputStream fis = new FileInputStream("d:/Koala.jpg");

FileOutputStream fos = new FileOutputStream("d:/copy_file1.jpg");

BufferedInputStream bufIn = new BufferedInputStream(new FileInputStream("d:/Koala.jpg"));

BufferedOutputStream bufOut = new BufferedOutputStream(new FileOutputStream("d:/copy_file2.jpg"));

Long startTime = System.currentTimeMillis();

int ch = 0;

while((ch=fis.read()) != -1){

fos.write((char)ch);

}

fos.flush();

fis.close();

fos.close();

Long endTime = System.currentTimeMillis(); 

System.out.println("FileInputStream+FileOutputStream花费了\t:"+(endTime-startTime));

startTime = System.currentTimeMillis();

byte[] bytes = new byte[1024];

int len = 0;

while((len = bufIn.read(bytes))!=-1){

bufOut.write(bytes,0,len);

}

bufOut.flush();

bufIn.close();

bufOut.close();

endTime = System.currentTimeMillis();

System.out.println("BufferedInputStream+BufferedOutputStream花费了\t:"+(endTime-startTime));

System.out.println("over");

}


}



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

答:当没有直接或者间接的引用到达对象时,该对象可以被jvm垃圾回收。