黑马程序员技术交流社区
标题:
关于writer的write方法
[打印本页]
作者:
Forever。
时间:
2012-7-1 00:26
标题:
关于writer的write方法
本帖最后由 Forever。 于 2012-7-1 12:13 编辑
br = new BufferedReader(new FileReader(oldfile));
bw = new BufferedWriter(new FileWriter(newfile));
char[] c = new char[1024];
int len = 0;
while((len = br.read(c))!=-1)
{
System.out.println(len);
bw.write(c, 0, len);
}
写程序的时候经常用这个方法,用的时候就这样用,但是总觉得理解的不够透彻。还请高手帮帮忙。
其实我最不理解的是那个write(c,0,len)方法。
透彻的说一下这个过程。十分3Q
作者:
周刚
时间:
2012-7-1 00:42
bw.write(c, 0, len);
这是因为每次向输出流中写的时候,会将整个缓冲数组1024个字符串都会输出,而实际的有效长度的
字符只是len,为了写入更准确,也为了节省空间。最好规定只写入有效长度(0到len),也就是从0到len。
作者:
张立江
时间:
2012-7-1 10:27
本帖最后由 小张童鞋 于 2012-7-1 10:32 编辑
char[] c = new char[1024];//
定义了一个临时存储数据的数组,其长度为1024或1024的整数倍
int len = 0;
while((len = br.read(c))!=-1)//
将br中的数据写进临时存储数组c中
{
System.out.println(len);
bw.write(c, 0, len);//
将临时存储数组c中的数据(从0角标(c[0])开始,到c[len]结束的数据) 写进到bw中
}
作者:
许涛
时间:
2012-7-1 10:50
BufferedReader br = new BufferedReader(new FileReader(oldfile));
BufferedWriter bw = new BufferedWriter(new FileWriter(newfile));
/* 以上操作使用了装饰设计模式,通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能
* 即通过缓冲区读写,提供了增强的读写操作
* */
char[] c = new char[1024];//定义字符数组,使得字符读取流和写入流相关联,其实这里已经没有必要,因为你之前定义的缓冲区中已经封装了数组
int len = 0;
while((len = br.read(c))!=-1)//循环读取流中数据,循环条件是,如果已到达流的末尾,则返回 -1
{
System.out.println(len);//打印每次循环读取到的字符数
bw.write(c, 0, len);//写入字符数组“c”的某一部数据,即只写入:从0到len位置的数据
}
复制代码
作者:
张文强
时间:
2012-7-1 11:05
本帖最后由 张文强 于 2012-7-1 11:07 编辑
/*
*
* 首先用String或File对象创建一个FileReader,为了提高效率把FileReader的引用交给BufferedReader。
* 然后向新文件写入数据,同理创建FileReader,把FileReader的引用交给BufferedReader。
*
* 举个现实实际点的例子,秋收的时候地里有一大堆粮食要往仓库,分两种情况
* 1、是自己一袋子一袋子往家背 就相当于只用FileReader
* 2、是用卡车一车车往仓库运 数组就相当于卡车
* while((len = br.read(c))!=-1) //判断地里是否还有粮食
* {
* bw.write(c, 0, len); //就相当于车循环拉粮食的动作,至于它具体是怎么运作的不用咱管。咱只管叫它运就行,也就是只管调用
*
* }
*/
//// 这是write的底层实现方法,有兴趣可以了解下
public void write(String str, int off, int len) throws IOException {
synchronized (lock) {
char cbuf[];
if (len <= writeBufferSize) {
if (writeBuffer == null) {
writeBuffer = new char[writeBufferSize];
}
cbuf = writeBuffer;
} else {
cbuf = new char[len];
}
str.getChars(off, (off + len), cbuf, 0);
write(cbuf, 0, len); // 再去往地里拉粮食
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2