第一个问题:毕老师讲了一个合并txt的例子,txt文件一般有两种编码ANSI(默认为GB2312)和 Unicode ,如果 我要合并100个以上的txt文件,里面若干文件是ANSI编码,若干文件是Unicode编码,有没有什么办法使合并后的文件不产生乱码,或者采用续写的形式也可以。(不采用手动去一个个看txt文件是什么格式的编码,然后把不同的编码改成同一编码= =!)
第二个问题:被Buffered修饰的流对象如:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter 一般都是用来提高效率的。但是这个效率提高有多少?在大文件的情况下会不会反而会降低效率?
我利用TCP上传文件的例子试了一下,我上传的是4G以上的文件,部分代码如下:
第一种:用BufferInputStream 和 BufferedOutputStream:
Socket s = new Socket("192.168.1.100", 10005);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\WIN7.iso"));
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
long time1 = System.currentTimeMillis();
byte[] buff = new byte[1024*1024*32];
int by = 0;
while((by = bis.read(buff)) != -1){
bos.write(buff, 0, by);
bos.flush();
}
s.shutdownOutput();
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
打印出时间的数值大概保持在150000左右。
第二种方法用FileInputStream和OutputSteam的方法:
Socket s = new Socket("192.168.1.100", 10005);
FileInputStream fis = new FileInputStream("D:\\WIN7.iso");
OutputStream out = s.getOutputStream();
long time1 = System.currentTimeMillis();
byte[] buff = new byte[1024*1024*32];
int by = 0;
while((by = fis.read(buff)) != -1){
out.write(buff, 0, by);
out.flush();
}
s.shutdownOutput();
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
打印出的时间的数值大概在120000左右。
上面的例子感觉Buffered效率还没有 没加修饰的高,求解具体原因……
|