黑马程序员技术交流社区

标题: 如何定义子增长的数组 [打印本页]

作者: zl918    时间: 2012-1-6 21:13
标题: 如何定义子增长的数组
本帖最后由 zl918 于 2012-1-7 22:31 编辑

在IO操作中,定义FileReader ,其read(char []) 中,当char[]容量不足时,如何自增张char[]的大小呢?请各位大大同学帮助小弟啊!小弟感激不尽啊!
作者: 王冀0127    时间: 2012-1-7 12:41
我们一般都是自定义数组的大小,而且是以数组的形式来传输想要传输的数据,你所说的不足时不会的,这个数组的大小是由我们自定义或者是在包中已经写好其大小值,当数组中的数据被填满后,就会把这个数组传出去,然后再创建一个新的数组来继续接受数据,填满一个发送一个,一直到最后一个数组读完数据放入数组中,必须要通过close()方法关闭流或通过frush()方法刷新流的时候才会将最后一个未填满的数组输出出去,只是刷新的方法流还存在,而close就是关闭了流。read()方法就每次是读到一个字节,就放入字符数组,再读再写,写满后创建个新的数组继续接受数据。而数组的大小要看主要传输多大的文件而自己来选择标准了
作者: zl918    时间: 2012-1-7 13:18
王冀0127 发表于 2012-1-7 12:41
我们一般都是自定义数组的大小,而且是以数组的形式来传输想要传输的数据,你所说的不足时不会的,这个数组 ...

嗯,不错的解决办法,谢谢哈!其实,模仿一下ArrayList()的实现也可以的。
我是这么做的:
do{
清空数组;
read(char[]);
write(char[]);
}while(read(char[]>0)
作者: 王冀0127    时间: 2012-1-7 14:03
zl918 发表于 2012-1-7 13:18
嗯,不错的解决办法,谢谢哈!其实,模仿一下ArrayList()的实现也可以的。
我是这么做的:
do{

你看我理解的对不对啊 假如要是每次都执行一次清空的话  就会形成资源有浪费  因为数组时固定的,而read()方法是每次读取一个字节,每次就读取一个字节然后就刷新出去  ,会浪费大部分未使用的空间,当数组写满后再清空,这样好像传输的也会更快些……
例如
  1. char[] buffer = new char[]; // 这是自定义的缓冲区
  2. int len;
  3. while((len=**.read(buffer))!= -1) //从缓冲区读出的数据,判断是否等于-1
  4. **.write(buffer, 0 ,len)//将数据从数据中写出
复制代码
我一般是这样用 然后在最后把输出输入流一关或者刷新一下 也保证了数据的完整性 也保证了数组的充分利用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2