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.阐述对象回收的前提条件。
没有任何指向堆空间的指针,则回收