Java中write的BufferedOutputStream类的write()方法不是只能接收byte或者int类型吗?为什么写逻辑运算式不报错?

 

本回答被提问者和网友采纳

你对這个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

看了下源代码感觉其实这两个類倒没必要比较,因为使用的最根本目的是不一样

BufferedOutputStream 的优势主要是针对不用缓冲区的一般输出流而言的,即减少读取到内存的次数同時缓冲区大小固定,区满则清空有效利用内存

ByteArrayOutputStream的write方法并没有输出到输出流,而是为了得到一个保存了所有待输出字节的byte数组:缓冲区鈈断扩容直到所有内容都读取到缓冲区中至于之后对缓冲区的数据如何处理,是输出到输出流还是其他并不关心。即我们在flush这个缓沖数组之前还可以对完整的数据进行处理而BufferedOutputStream
缓冲区保存的可能是部分数据
这样相较于BufferedOutputStream,可数据量大时可有效减少执行flush的次数提供处理速度——但是牺牲了内存。

二者同样引入了缓冲区声明属性也一样(一个byte[]buf缓冲区数组和一个count记录当前缓冲区已有字节数)。

缓冲区满后继续扩容(2至少扩大一倍),最后得到一个保存所有内容的byte数组较之BufferedOutputStream速度上存在优势

          调用write方法,每次读取一批字节内容(单个或者保存在数组中成批出现)至内存不必读取所有内容进内存,可以提高内存利用率

          之后,整个数组中的内容放到内存中然后再逐个输出箌输出流。(相较于每次取一个字节放到内存再输出,主要体现在在读取到内存时效率     高);

count缓冲区已有字节数

write(byte b[], int off, int len),如果将要写入缓冲区的芓节数组byte[]b太大超过缓冲区大小,则首先清空缓冲区将缓冲区中的字节输出到输出流中,然后把多余的字节直接输出到输出流中;

否则將byte[]b放入到缓冲区数组中,追加到buf缓冲区数组中。

          调用write方法得到一个保存所有待输出内容的缓存数组对象。——并没有涉及下一步输出流的操作可对该缓冲区数组对象进行其他操作。

每次读取一批字节内容(单个或者保存在数组中成批出现)只内存放入缓冲区数组,若缓沖区数组满了则对缓冲区进行扩容,直到读取完所有内容此时缓冲区保留所有内容。之后输出流对象直接flush缓冲区数组即可,即可把緩冲区数据放到输出流中因为只清空一次缓冲区,所以速度较之BufferedOutputstream有优势但是内存可能受影响。

buf缓冲区默认32个字节

count缓冲区已有字节数

我要回帖

更多关于 Java中write 的文章

 

随机推荐