java中文件读取的缓存问题

代码如下:
package ZiJieLiuZiFuLiu02;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class ZiJieLiuZiFuLiu02 {

/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f=new File("d:"+File.separator+"fly.txt");
InputStream input=new FileInputStream(f);

byte b[]=new byte[1024];
int len=0;
int temp=0;
while((temp=input.read())!=-1)
{
b[len]=(byte)temp;
len++;
}
input.close();
System.out.println(new String(b,0,len));
}

}
其中byte b[]=new byte[1024];这句定义的是数组的长度,如果超过长度该怎么处理,java不支持数组大小动态变化吧?
b[len]=(byte)temp;这句如果temp超过1024咋整?求解释,谢谢!

read方法又不止一个……

public int read(byte[] b)
throws IOException

从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b
中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。
如果 b 的长度为 0,则不读取任何字节并返回
0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值
-1;否则,至少读取一个字节并将其存储在 b 中。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-25
很负责任告诉你写的代码有问题,首先说你的程序吧byte[] b=new byte[1024] 它的含义和目的就相当于你要去河里挑水到缸里,而这句语句就相当于给你一个桶子。河里的水相当于那你要读取的文件,而缸就相当于要写入的文件。所以你的while语句条件该改为while((temp=input.read(b)!=-1)这句语句相当于一个字节一个字节读取。而大括号里面一般执行写操作如{out.write(b , 0 , temp);}
在这里还要纠正楼上的说“超过长度,它会自动增加长度的!”这是错误的,数组一旦初始化长度就固定了。长度会增长的应该是ArrayList集合
第2个回答  推荐于2016-06-20
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // ●判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
第3个回答  2013-05-25
超过了就是抛出数组越界异常,所以数组长度不能写死,应为文件的大小为f.length
当然这样文件也不能太大,否则很慢,你可以使用BufferedInputStream这个流可以一次读一个Byte数组
第4个回答  2013-05-25
这个你不用担心的啊??超过长度,它会自动增加长度的!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网