黑马程序员技术交流社区
标题:
IO方面
[打印本页]
作者:
王广彬
时间:
2012-7-30 00:11
标题:
IO方面
在字节输入流中能不能根据文件的大小来开辟数组空间呢?如果有怎么实现啊?
作者:
柯玲
时间:
2012-7-30 00:39
有的,API中InputStream有这样样一个方法: int available() 返回文件中的字节个数
写法类似于:
public static void main(String[] args) throws IOException{
InputStream ins=new FileInputStream("buf.txt");
//此处定义一个大小刚刚好的缓冲区,就不用再循环读取
byte[] buf=new byte[ins.available()];
ins.read(buf);
System.out.println(new String(buf));
ins.close();
}
复制代码
但要注意的是:若拷贝一个容量过大的文件,如电影,available()返回的数组长度有可能超过虚拟机的内存容量。一般情况下虚拟机启动时是有默认内存大小的,如超过虚拟机默认内存大小值,会发生内存溢出,所以available()定义数组长度的方法要慎用,最好的方式还是用byte[] buf=new byte[1024*n];
作者:
李菁
时间:
2012-7-30 01:16
FileInputStream fis=new FileINputStream("fos.txt");
byte[] b=new byte[fis.available()];
//available方法用老定义一个方法好的缓冲区,这样就可以不用再循环
fis.read(b);
System.out.println(new String(b));
fis.close();
如果不用available定义缓冲区大小,就必须循环读取
FileInputStream fis=new FileInputStream("fos.txt");
byte[] b=new byte[1024];
int length=0;
while((length=fis.read(b))!=-1){
System.out.println(new String(b,0,length));
}
fis.close();
毕老师的视频里讲的很清楚的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2