A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Foundmoon 中级黑马   /  2015-6-16 10:25  /  612 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最进看IO,各种流,字符流、字节流、转换流。同样是copy一个文本文件,字符流 代码如下package IO;
import java.io.*;
public class copyDemo
{
        public static void main(String[] args)
        {
                FileWriter fw =null;
                FileReader fr=null;
                char[] chs=new char[1024];
                int x=0;
                try
                {
                long l1=System.currentTimeMillis();
                fr=new FileReader("G:\\IMG_2064.JPG");
                fw=new FileWriter("g:\\2064.JPG");
                while((x=fr.read(chs))!=-1)
                        fw.write(chs,0,x);
                long l2=System.currentTimeMillis();
                System.out.println(l2-l1);
                }
                catch(IOException e)
                {
                        System.out.println(e.toString());               
                }
                finally
                {
                        try
                        {
                        if(fw !=null)
                                fw.close();
                        }
                        catch(IOException e)
                        {
                                System.out.println(e.toString());
                        }
                        try
                        {
                                if(fr!=null)
                                        fr.close();
                        }
                        catch(IOException e)
                        {
                                System.out.println(e.toString());
                        }
                }
        }
}

将FileWriter/FileReader换成FileOutputStream和FileInputStream都可以达到目的,当然程序中的一些中间变量如char数组要改成byte数组等
,而且感觉字节流更快一点,自己也验证了一下,确实快,应该是因为少了查表嘛。

一开始觉得字节流和字符流分的不是很清楚,研究了一下,自己的有一些理解:之所以自己晕菜了,就是因为没有抓住IO在读写的最本质。不论是字节流还是字符流,读写数组都是读写的二级制数,不同在于字符流会将读取的字节,按照系统的默认码表“翻译”成字符,在字符流写的过程是,是将字符按照系统的码表“翻译成”二级制数,写入文件,而字节流读写的都只是二进制数而已。
但是,在复制文本以外的文件时,用字符流就会出现错误,因为字符流在读取过程会遇到码表没有的值 ,“翻译”出了问题,最终写入的数据,和原来的二级制数不一样的,copy失败。
还有一点是,用字节流和字符流写一个文本文件,能够达到相同的目的,前提是知道要写入的字符的编码
                FileWriter fw=new FileWriter("g:\\111111111.txt");
                FileOutputStream fos=new FileOutputStream("g:\\333333333333.txt");
                fw.write(37101);//或者   fw.write(“郭”);
                fos.write(185);
                fos.write(249);

写入文本的数据是一样的。

6 个回复

倒序浏览
赞个!赞
回复 使用道具 举报
这个我完全看懵了,谢谢楼主整理
回复 使用道具 举报
赞!!!
回复 使用道具 举报
赞一个,总结不错
回复 使用道具 举报
学习了~~~
回复 使用道具 举报
还看不懂,不过肯定很厉害
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马