java中文件读取的缓存问题
代码如下:packageZiJieLiuZiFuLiu02;importjava.io.File;importjava.io.FileInputStream;import...
代码如下:
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咋整?求解释,谢谢! 展开
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咋整?求解释,谢谢! 展开
5个回答
展开全部
read方法又不止一个……
public int read(byte[] b)
throws IOException
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b
中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。
如果 b 的长度为 0,则不读取任何字节并返回
0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值
-1;否则,至少读取一个字节并将其存储在 b 中。
public int read(byte[] b)
throws IOException
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b
中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。
如果 b 的长度为 0,则不读取任何字节并返回
0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值
-1;否则,至少读取一个字节并将其存储在 b 中。
展开全部
很负责任告诉你写的代码有问题,首先说你的程序吧byte[] b=new byte[1024] 它的含义和目的就相当于你要去河里挑水到缸里,而这句语句就相当于给你一个桶子。河里的水相当于那你要读取的文件,而缸就相当于要写入的文件。所以你的while语句条件该改为while((temp=input.read(b)!=-1)这句语句相当于一个字节一个字节读取。而大括号里面一般执行写操作如{out.write(b , 0 , temp);}
在这里还要纠正楼上的说“超过长度,它会自动增加长度的!”这是错误的,数组一旦初始化长度就固定了。长度会增长的应该是ArrayList集合
在这里还要纠正楼上的说“超过长度,它会自动增加长度的!”这是错误的,数组一旦初始化长度就固定了。长度会增长的应该是ArrayList集合
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以通过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流会一直存在,直到程序运行结束。
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流会一直存在,直到程序运行结束。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
超过了就是抛出数组越界异常,所以数组长度不能写死,应为文件的大小为f.length
当然这样文件也不能太大,否则很慢,你可以使用BufferedInputStream这个流可以一次读一个Byte数组
当然这样文件也不能太大,否则很慢,你可以使用BufferedInputStream这个流可以一次读一个Byte数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个你不用担心的啊??超过长度,它会自动增加长度的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询