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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘源 中级黑马   /  2012-7-18 13:07  /  1605 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘源 于 2012-7-18 20:13 编辑

方法一:
byte[] buf = new byte[1024];
  int len = 0;
while((len=fis.read(buf))!=-1)
{
   fos.write(buf,0,len);
}
方法二:
String line = null;
while((line=bufr.readLine())!=null)
{
        bufw.write(line);
        bufw.newLine();
        bufw.flush();
}
     上面两种方法都是可以用来复制文件内容的,他们一个是用数组的形式,一个是SturingBuffer的形式储存数据,但他们2个谁复制比较快,底层他们都是用read()在调用。有明白人讲解下吗?一般开发用什么方式复制啊,有什么利弊。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
第一种方法:适合二进制文件,如图片、音乐、视频等。
第二种方法:适合复制文本制文件。原因:一次读一行,写入,不用一字节一字节的写。
StringBuffer也是底层用数组来实现的。
回复 使用道具 举报
我的理解是:
第一种方式:是字节流的方式读取和写入数据。先把读到的二进制数据存储在一个长度为1024的数组中。当数组存满为了之后再写到指定的相应的地方。它一般用在非文本文件,图片,视频等。其实什么类型的文件他都可以读写,只要有权限。但是由于文本文件有效率更高的方式。所以一边不用它。
第二种方式是字符流的方式来读取和写入数据的。它只能用做读取文本类的文件。readLine()方法是只有读到了行分隔符才会停止然存入一个数组中。表示读取一行完毕。如果用他去读那些非文本类的文件,就会出现错误,数据丢失等情况。但是他的效率很高。你可以想象一下。一下读一个字和一下读一行字谁的效率高。StringBuffer的底层也是用数组来完成的。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果文件是纯文本文件的话,第二种比第一种快
虽然第二种底层页是调用了read()方法,但是第二种用了缓冲区(BufferedReader,BufferedWriter),这个是一种高效的输入输出格式.
但是文本不是纯文本文件(比如图片,音频,视频等)时,只能用第一种方法来读取,因为它是一个字节一个字节的读取
具体开发的时候就要看读取的是纯文本文件还是非纯文本文件了
回复 使用道具 举报
需要区分是文本文件还是非文本文件
对于文本文件可以用缓冲流readLine(),一次一行,低层只是对字符流的封装,但效率有提升
非文本文件只能用字节流的读取方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马