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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 唐永康 于 2012-11-27 18:36 编辑

/*
文本文件读取方式二:
读到缓冲区,数组里面去read(char[] buf);
*/
package io.practice;
import java.io.*;
public class Demo4
{
FileReader fr;
Demo4()
{
  try
  {
   //创建文件读取流对象
   fr = new FileReader("e:\\Demo.txt");
   
   //读数据之前先做一个字符数组缓冲区,用于存储读取到的字符
   //read(char[])返回的是读到的字符个数
   char[] buf = new char[1024];
   
   for(int ch=0;(ch=fr.read(buf))!=-1;)
   {
//    System.out.println(buf);
   // System.out.println(new String(buf));
System.out.println(new String(buf,0,ch));
   
   }
  }
  catch(IOException e)
  {
   System.out.println(e.toString());
  }
  finally
  {
   if(fr!=null)
   {
    try
    {
     fr.close();
    }
    catch(IOException e)
    {
     System.out.println(e.toString());
    }
   }
  }
  
}

public static void main(String[] args)
{
  
  new Demo4();
}

}

看上面的代码,红色的三行打印在控制台上的结果是一样的,有什么区别,搞不明白。

评分

参与人数 1技术分 +1 收起 理由
杨千里 + 1 多看看毕老师的视屏!

查看全部评分

6 个回复

倒序浏览
本帖最后由 ljhheima 于 2012-11-27 19:07 编辑

我可以很老实地告诉你,它们没有区别,你爱用哪种就用哪种。
第一种是打印字符数组,字符数组和一般数组不同,它是打印数组中的字符
第二第三种方式是将数组转成字符串,一样的。
回复 使用道具 举报
第一种好像是输出数组的内存地址
第二种是把整个长度为1024的数组都输出
第三种是把数组的有效元素输出
回复 使用道具 举报
三种不同的方式让我们更能深刻理解String
回复 使用道具 举报
三种不同方式有时在特定的环境中可能会用到
回复 使用道具 举报
System.out.println(buf);
这句打印的是这个char型数组,在打印的时候,buf会自动调用toString()方法,将buf数组以字符串的方式打印出来

System.out.println(new String(buf));
这里面打印的就是一个字符串,不过不是自动调用toString()方法,而是人工调用new String(char[])的方法将数组buf转换为字符串以后再输出

System.out.println(new String(buf,0,ch));
这里面也是利用的String的构造函数new String(char[] value, int offset, int count)分配一个新的 String,它包含来自该字符数组参数的一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。
参数:
value - 作为字符源的数组。
offset - 初始偏移量。
count - 长度。
这样就把buf的有效字符转换为字符串的形式后输出

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
刚才的解释有点小误差,第一句错了,在此修正
System.out.println(buf);
这句打印的是这个char型数组,在打印的时候,会按顺序输出 buf 数组中的所有字符。
在这里不会自动调用toString方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马