为什么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又是做什么的
展开
 我来答
龙旯天
2017-12-02 · TA获得超过189个赞
知道小有建树答主
回答量:190
采纳率:46%
帮助的人:47.5万
展开全部
BufferedInputStream(InputStream in, int size)

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,也就是指数据传输完了。

泉凝物497
2017-12-02 · 超过11用户采纳过TA的回答
知道答主
回答量:57
采纳率:38%
帮助的人:10.3万
展开全部
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();
更多追问追答
追问
BufferedInputStream包装后,,不用创建byte变量了么,,包装后用和不用有区别么
还有就是
int a= aa.read();
while ( a!=-1) {
bb.write(a);
a=aa.read();

}
这部分是不是有问题啊,,新手,,问题有点多
追答
导入BufferedInputStream包后不用建数组啊,导了包可以不用,还用FileInputStream,不过不用的话导包就有点多此一举了,那段代码我测试了下,没问题啊,你粘到ecilpse里运行下,报错的地方就导包或者抛异常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式