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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zl918 黑马帝   /  2012-1-6 21:13  /  2705 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zl918 于 2012-1-7 22:31 编辑

在IO操作中,定义FileReader ,其read(char []) 中,当char[]容量不足时,如何自增张char[]的大小呢?请各位大大同学帮助小弟啊!小弟感激不尽啊!

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

3 个回复

倒序浏览
我们一般都是自定义数组的大小,而且是以数组的形式来传输想要传输的数据,你所说的不足时不会的,这个数组的大小是由我们自定义或者是在包中已经写好其大小值,当数组中的数据被填满后,就会把这个数组传出去,然后再创建一个新的数组来继续接受数据,填满一个发送一个,一直到最后一个数组读完数据放入数组中,必须要通过close()方法关闭流或通过frush()方法刷新流的时候才会将最后一个未填满的数组输出出去,只是刷新的方法流还存在,而close就是关闭了流。read()方法就每次是读到一个字节,就放入字符数组,再读再写,写满后创建个新的数组继续接受数据。而数组的大小要看主要传输多大的文件而自己来选择标准了

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
admin + 1
zl918 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王冀0127 发表于 2012-1-7 12:41
我们一般都是自定义数组的大小,而且是以数组的形式来传输想要传输的数据,你所说的不足时不会的,这个数组 ...

嗯,不错的解决办法,谢谢哈!其实,模仿一下ArrayList()的实现也可以的。
我是这么做的:
do{
清空数组;
read(char[]);
write(char[]);
}while(read(char[]>0)

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
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)//将数据从数据中写出
复制代码
我一般是这样用 然后在最后把输出输入流一关或者刷新一下 也保证了数据的完整性 也保证了数组的充分利用

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马