感谢大家对IT十八掌大数据的支持,今天的作业如下:

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的工作原理,

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

答:

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

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

缓冲区读写器的性能恒大于非缓冲区读写器的性能。

   

2.阐述HashSet与HashMap的异同。

答:

Hashset:Hashset集合内部是通过HashMap进行实现的。使用的是HashMap中key部分。实现set接口,set继承collection接口

HashMap:实现Map接口,Map接口与Collection接口是同级的。

它们都具有不重复的特点,采用hash机制进行存储。

3.Charset类操作:isSupport()

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

gb2312

GB2312

gbk

GBK

utf-8

utf8

iso8859-1

iso-8859-1

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

答:

package com.it18zhang_13job.demo;

import java.nio.charset.Charset;

import java.util.HashMap;

import java.util.Map;

public class CharsetApp {

public static void main(String[] args) {

/**

* 迭代所有字符集名称

*/

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

System.out.println(key);

}

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

Map<String,String> map = new HashMap<String,String>();

map.put("key001", "tom");

map.put("key001", "tomas");

System.out.println(map.get("key001"));

}

}

4.FileReader.getEncoding();

  new String(,,,,,charset);

答:

package com.it18zhang_13job.demo;

import java.nio.charset.Charset;

/**

 * 

 * @author 王威-网络班 第3题 Charset类操作

 */

public class CharsetTest {

    public static void main(String[] args) {

        // 验证字符集

        System.out.println("gb2312验证结果:" + Charset.isSupported("gb2312"));

        System.out.println("GB2312验证结果:" + Charset.isSupported("GB2312"));

        System.out.println("gbk验证结果:" + Charset.isSupported("gbk"));

        System.out.println("GBK验证结果:" + Charset.isSupported("GBK"));

        System.out.println("utf-8验证结果:" + Charset.isSupported("utf-8"));

        System.out.println("utf8验证结果:" + Charset.isSupported("utf8"));

        System.out.println("iso8859-1验证结果:" + Charset.isSupported("iso8859-1"));

        System.out.println("iso-8859-1验证结果:" + Charset.isSupported("iso-8859-1"));

        // 获取平台默认的字符集

        Charset defaultCharset = Charset.defaultCharset();

        System.out.println("系统默认的字符集:" + defaultCharset.displayName());

    }

}

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.阐述对象回收的前提条件。

答:

1)对象的失去引用

2)对象离开作用域