黑马程序员技术交流社区
标题:
new String(buf,0,ch)这个地方怎么理解呢
[打印本页]
作者:
陈波
时间:
2012-5-6 19:57
标题:
new String(buf,0,ch)这个地方怎么理解呢
public static void main(String[] args) {
FileReader fr = null;
FileWriter fw = null;
try{
fr =new FileReader("a.txt");
fw = new FileWriter("c.txt");
char[] buf = new char[1024];
int ch = 0;
while ((ch=fr.read(buf))!=-1) {
fw.write(new String(buf,0,ch));//
这个地方为什么是new String(buf,0,ch)这个地方怎么理解呢?
fw.flush();
}
}
catch(IOException e)
{
throw new RuntimeException("复制失败");
}
finally
{
if(fr!=null)
try {
fr.close();
} catch (IOException e) {
throw new RuntimeException("读取关闭失败");
}
if(fw!=null)
try {
fw.close();
} catch (IOException e) {
throw new RuntimeException("写入关闭失败");
}
}
}
}
作者:
徐慧书
时间:
2012-5-6 20:07
这是String 的一个重载的构造方法,String 是由字符组成的,对吧, 那么这就好理解了 fw.write(new String(buf,0,ch))
new String(buf,0,ch) 表示 将字符数组buf 从第一个字符(java以0开始,也可以说是第0个字符)开始,长度为ch的的所有字符构建成一个字符串,也就是String了
而FileWriter类有write方法其中便有一个以String为参数的重载方法。
所以呢,先利用字符数组 buf 构建出一个String,然后再调用fw的write(String str) 方法将这个字符串写入文件中!
不过说实话,哥们,这样做有些画蛇添足了,因为FileWriter 本身就有一个write(cbuf, off, len) 所以你可以直接调用这个,写字符数组,而不用先转成字符串再写了。。。
作者:
隋营营
时间:
2012-5-6 20:08
因为 fr.read(buf) 的作用:将读到的字符存入buf,返回已经读取的字符数ch。
fw.write(new String(buf, 0, ch))的作用是将buf中的字符写入输出流
所以,若读取的字符没有装满buf,向输出流中写的只是buf中下标从0到ch的字符!
作者:
何阳
时间:
2012-5-6 20:10
fw.write(new String(buf,0,ch));//这个地方为什么是new String(buf,0,ch)这个地方怎么理解呢?
你可以查看API 里面有这样一个方法,
String(char[] value, int offset, int count)
分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
通过传递的char数组,从offset开始,添加count个字符,组成一个新的字符串。
作者:
谭景宾
时间:
2012-5-6 20:16
char[] buf = new char[1024];
int ch = 0;
while ((ch=fr.read(buf))!=-1) {
fw.write(new String(buf,0,ch));
fw.flush();
}
fw.write(new String(buf,0,ch));
buf=就是把char数组的1024个数据写到指定文件里。
然而有可能读取到的数据不足1024个,那么也会在内存开辟了1024个数据大小的空间,比如只读取到了100个,只需要开辟100个数据大小的空间即可,为了节约内存
就指定从数组的0下标开始写,ch表示读取到的数据个数,读取到几个就写几个。
new String()就是将其cha数组转换为字符串
作者:
赵玮_Tom
时间:
2012-5-6 20:17
new String(buf, 0, len)
首先,对于FileReader的read()方法,一次读取一个字符。在该例中,FileReader的read()方法从源文件中读取数据,每次读取一个字符,这个字符并没有直接写入到目的文件中,而是存入到了数组buf中,
len相当于一个计数器,记录的是数组中存入的有效数据的长度
。在整个读取过程中,
数组充当了中间站的作用
,提高读写效率。
以上是读的过程,然后就是写的过程。写入数据实际上是将数组buf中的数据写入到目的文件中,调用FileWriter的write()方法,write方法有多种重载形式。
写入到目的文件中的数据是字符串,而内存数组buf中的数据是字符数组,所以要将数组中的有效数据变为字符串形式,即:new String(buf, 0, len),
然后再调用write()方法将字符串写入目的文件。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2