为什么bufferedInputSream读取之前要创建一个byte数组,那创建时创建的缓存又是做什么的 20
f=newFile("d:"+File.separator+"demo.txt");input=newFileInputStream(f);//指定文件带缓冲区的读取流且...
f=new File("d:"+File.separator+"demo.txt");
input=new FileInputStream(f);
// 指定文件带缓冲区的读取流且指定缓冲区大小为2KB
bis=new BufferedInputStream(input,2*SIZE);
int bisLength=bis.available();
int readLength=0;
byte[] byteArray=new byte[SIZE];
int tmp=0;
while((tmp=bis.read(byteArray))!=-1){
strBuild.append(new String(byteArray,0,tmp));
System.out.println("每次读取字节数量:"+tmp);
System.out.println("文件中剩余字节数:"+input.available());
}
为什么要创建byteArray,,new BufferedInputStream(input,2*SIZE);这里的2*size又是做什么的 展开
input=new FileInputStream(f);
// 指定文件带缓冲区的读取流且指定缓冲区大小为2KB
bis=new BufferedInputStream(input,2*SIZE);
int bisLength=bis.available();
int readLength=0;
byte[] byteArray=new byte[SIZE];
int tmp=0;
while((tmp=bis.read(byteArray))!=-1){
strBuild.append(new String(byteArray,0,tmp));
System.out.println("每次读取字节数量:"+tmp);
System.out.println("文件中剩余字节数:"+input.available());
}
为什么要创建byteArray,,new BufferedInputStream(input,2*SIZE);这里的2*size又是做什么的 展开
2个回答
展开全部
BufferedInputStream(InputStream in, int size)
BufferedInputStream就是为了创建个指定缓冲区大小的 BufferedInputStream 并保存其参数
前面一个是指InputStream in输入流你应该清楚,后面的 size 值的是缓冲区大小的,创建的是一个长度为 size 的内部缓冲区数组,你这里的2*SIZE就是指两倍数组长度,建议你去看看API
BufferedInputStream就是为了创建个指定缓冲区大小的 BufferedInputStream 并保存其参数
前面一个是指InputStream in输入流你应该清楚,后面的 size 值的是缓冲区大小的,创建的是一个长度为 size 的内部缓冲区数组,你这里的2*SIZE就是指两倍数组长度,建议你去看看API
更多追问追答
追问
那byte[] byteArray=new byte[SIZE];这个数组是做什么的
bis.read(byteArray)这句话是将数据缓存在byteArray中了吧,,那创建BufferedInputStream参数中的size创建的数组是做什么的呢,,不是很理解这两个的作用
追答
- BufferedInputStream
- 中创建A数组来存储File的数据,就是你的input。byteArray创建B数组,
然后read(byte[] b, int off,int len)
- 将A数组中的数据传递给B数组
- read方法中传递的数据如果已到达流末尾,则返回 -1,也就是指数据传输完了。
展开全部
BufferedInputStream 本身就是缓冲流,不要求建数组
FileInputStream 需要,把数据放到个数组里起到缓冲流效果
我贴一个自己些的代码,复制一首歌的操作,你对比下,变量名随便起的,不太规范
///////////////////////////////////////////////////////////////
File aFile=new File("C:\\Users\\Administrator\\Desktop\\a.mp3");
File bFile=new File("C:\\Users\\Administrator\\Desktop\\c.txt");
BufferedInputStream aa=new BufferedInputStream(new FileInputStream(aFile));
BufferedOutputStream bb=new BufferedOutputStream(new FileOutputStream(bFile));
int a= aa.read();
while ( a!=-1) {
bb.write(a);
a=aa.read();
}
aa.close();
bb.close();
//////////////////////
File aFile=new File("C:\\Users\\Administrator\\Desktop\\a.mp3");
File bFile=new File("C:\\Users\\Administrator\\Desktop\\aaa.mp3");
FileInputStream aFileInputStream=new FileInputStream(aFile);
FileOutputStream bFileOutputStream=new FileOutputStream(bFile);
byte[]a=new byte[100];
while (aFileInputStream.read(a)!=-1) {
bFileOutputStream.write(a);
}
aFileInputStream.close();
FileInputStream 需要,把数据放到个数组里起到缓冲流效果
我贴一个自己些的代码,复制一首歌的操作,你对比下,变量名随便起的,不太规范
///////////////////////////////////////////////////////////////
File aFile=new File("C:\\Users\\Administrator\\Desktop\\a.mp3");
File bFile=new File("C:\\Users\\Administrator\\Desktop\\c.txt");
BufferedInputStream aa=new BufferedInputStream(new FileInputStream(aFile));
BufferedOutputStream bb=new BufferedOutputStream(new FileOutputStream(bFile));
int a= aa.read();
while ( a!=-1) {
bb.write(a);
a=aa.read();
}
aa.close();
bb.close();
//////////////////////
File aFile=new File("C:\\Users\\Administrator\\Desktop\\a.mp3");
File bFile=new File("C:\\Users\\Administrator\\Desktop\\aaa.mp3");
FileInputStream aFileInputStream=new FileInputStream(aFile);
FileOutputStream bFileOutputStream=new FileOutputStream(bFile);
byte[]a=new byte[100];
while (aFileInputStream.read(a)!=-1) {
bFileOutputStream.write(a);
}
aFileInputStream.close();
更多追问追答
追问
BufferedInputStream包装后,,不用创建byte变量了么,,包装后用和不用有区别么
还有就是
int a= aa.read();
while ( a!=-1) {
bb.write(a);
a=aa.read();
}
这部分是不是有问题啊,,新手,,问题有点多
追答
导入BufferedInputStream包后不用建数组啊,导了包可以不用,还用FileInputStream,不过不用的话导包就有点多此一举了,那段代码我测试了下,没问题啊,你粘到ecilpse里运行下,报错的地方就导包或者抛异常
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询