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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈波 中级黑马   /  2012-5-5 21:19  /  6845 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈波 于 2012-5-5 21:24 编辑

class FileReaderTest
{
        public static void main(String[] args) throws IOException
        {
                FileReader  fr = new FileReader("DateDemo.java");

                char[] buf = new  char[1024];

                int num = 0;

                while((num=fr.read(buf))!=-1)
                {
                        System.out.print(new String(buf,0,num));
                }

                fr.close();
        }

}

7 个回复

倒序浏览
char[] buf = new  char[1024];

//表示的意思:
我们知道一个char在内存在占2个字节,你计算机存储的容量是以字节为单位的,
那么你定义的这个数组中能存储1024个字符,等于1024*2=2048个字节,
我们知道1KB=1024字节,那么2048就是2KB的容量,这样方便计算机的运行,
其实你也可以规定其他的长度,但最好是1024的倍数.
回复 使用道具 举报
1024个字符的数组,这是一个缓冲,java推荐使用8K作为缓冲,也就是8192 个字节
为什么要缓冲呢?  假设没有这个字符数组的缓冲,那么你读取一个长度100000的字符的文件,要怎么读呢,得一个字符一个字符的读也就是得调用100000次读取方法对吧,而有了缓冲,那么底层的操作系统函数一个字符一个字符的读取,读取到一定数量时,JVM来read一下就好了,多方便,可以大大减少程序调用read的次数,程序的效率自然也就高了。

提些个人意见,根据自己的经验,读取文件要么是通过字节流也就是FIleInputStream来读(8192个字节的缓冲数组),要么就是通过BufferedReader 的readLine()(一次读取一行,效率更高的), 很少会通过FileReader 来读噢。 毕竟如果读取文件,很重要的一点便是编码问题,使用字节流与编码无关可以读取任意格式的文件,若是文本文件,那么完全可以使用BufferedReader,这样效率很高,个人看法,有误请指正
回复 使用道具 举报
自定义的,但是最好是1024.也就是1kb
回复 使用道具 举报
请阅读下面的换算公式:
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
当然,还有更大的计数单位和其他形式的换算方法,这里不再赘述
下面我为你简单说一下原因:
1.计量存储和传输的计量是以字节为单位
2.缓冲区(数组)容量并非固定不变,可以自行定义
3.为提高计算机的运算效率,将其定义为计算机最为熟悉的长度-->1024B,这是程序优化的一部分
我想你看到上面这几种换算形式与上面两位仁兄的回答,你的这个问题应该可以解决了
如果有不明白的地方可以恢复我,我再为你做进一步说明

回复 使用道具 举报
楼上几位都说的很详细了,其实简单的说 1024就是1K的单位,而1024*1024就是1M ,这些就是内存容量单位的一种表达方式,记住就行没必要问原因
回复 使用道具 举报
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB

原因:
1.计量存储和传输的计量是以字节为单位
2.缓冲区(数组)容量并非固定不变,可以自行定义
3.为提高计算机的运算效率,将其定义为计算机最为熟悉的长度-->1024B,这是程序优化的一部分。
希望能帮到你。
回复 使用道具 举报
啷个里个郞 发表于 2012-5-6 07:48
1KB = 1024B
1MB = 1024KB
1GB = 1024MB

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