文章说不带 , 既然不带,那为什么还有下面这种写法 ?
FileOutputStream
不带缓存区,但它可以被继承,所以它的子类是不是带缓冲区就不得而知了,比如
class BufferedFileOutputStream extends FileOutputStream { // 这里是带缓冲区的实现}
FileOutputStream fos = new BufferedFileOutputStream(...);...fos.flush();fos.close();
这种情况下,加 flush 是有必要的。
当然题上很明确的 new FileOutputStream()
,不要 flush 本身没什么问题。但是,随着项目的继续开发,变得复杂之后,有可能会出现这样的变化
进化一:把 new FileOutputStream()
修改为工厂来生成对象,比如 createFileOutputStream
,
FileOutputStream createFileOutputStream(args) { // 对参数进行一些处理,然后 return new FileOutputStream(...);}
接下来,进一步进化,createFileOutputStream()
可以产生一个 BufferedFileOutputStream
对象(也许是根据参数来产生)
那这时候,如果外面的代码没有 flush 就可能引起缺陷。而对于一个修改 createFileOutputStream
的程序员来说,它不一定会想到去查看和修改使用的地方。甚至,如果 createFileOutputStream
是在另一个库里,那就更不可能去检查使用。
因此……习惯性的加上 .flush()
,是个好习惯。
看FileOutputStream,flush 是直接继承自 OutputStream 的。
而 OutputStream 的 flush 实现是什么也不做。
它没有缓冲区 ,并不意味着它的 flush 不能被调用。
在 Java 中,FilterOutputStream
本身并不带缓冲区。它是一个抽象类,用于创建其他类型的输出流,这些输出流可以附加到基础输出流上,并对其进行处理或转换。
然而,在实际使用中,通常会将 FilterOutputStream
与其他具有缓冲区的类一起使用,例如 BufferedOutputStream
。BufferedOutputStream
是一个具有缓冲区的输出流,它可以将数据存储在内部缓冲区中,以便更高效地写入数据。
下面是一种常见的用法,其中 FilterOutputStream
与 BufferedOutputStream
结合使用:
OutputStream outputStream = new FileOutputStream("file.txt");OutputStream bufferedOutput = new BufferedOutputStream(outputStream);OutputStream filteredOutput = new SomeFilterOutputStream(bufferedOutput);// 使用 filteredOutput 进行写入操作filteredOutput.write(data);filteredOutput.flush();
在上面的示例中,SomeFilterOutputStream
是继承自 FilterOutputStream
的自定义过滤输出流。虽然 SomeFilterOutputStream
不带缓冲区,但通过将其包装在 BufferedOutputStream
中,我们可以获得缓冲区的优势,并提高写入操作的效率。
因此,尽管 FilterOutputStream
本身不带缓冲区,但在实际应用中,通常会与其他具有缓冲区的类一起使用,以便更好地处理和转换数据。
问题内容: awt是否可以进行双缓冲(在Java中)?目前,我知道awt不应该与swing一起使用,所以我不能使用BufferStrategy之类的东西(我已经用awt编写了一些我不想在swing中重写的代码)。 如果使用awt可以进行双缓冲,我是否必须手动写入缓冲区?与swing不同,awt似乎没有相同的内置双缓冲功能。 如果必须手动编写代码,是否有一个不错的教程可以看?还是对于新手程序员来说,
主要内容:创建带缓冲通道,阻塞条件Go语言中有缓冲的通道(buffered channel)是一种在被接收前能存储一个或者多个值的通道。这种类型的通道并不强制要求 goroutine 之间必须同时完成发送和接收。通道会阻塞发送和接收动作的条件也会不同。只有在通道中没有要接收的值时,接收动作才会阻塞。只有在通道没有可用缓冲区容纳被发送的值时,发送动作才会阻塞。 这导致有缓冲的通道和无缓冲的通道之间的一个很大的不同:无缓冲的通道保证进
问题内容: 我是Spatialite的新手。我有以下查询: 我实际上想创建100米的缓冲区并了解其中包含的链接。 我可以找到插入的“ 100”实际上是度值,它为我提供了该范围内的输出。 我也可以在查询中输入度值,但是在世界范围内,从度到米/公里的转换并不相同。我经过许多站点,能够知道1度=大约110公里。但是从GIS专家和一些参考站点也可以了解到地球上的每个极点都是不同的。 例如,对于平面近似,度
我试图用progressbar修改Koush的下载示例中的代码,使其写入FileOutputStream而不是File,但eclipse给出了以下错误: ResponseFuture类型未定义方法progressHandler(new ProgressCallback(){}) 代码如下:
我正在将spring 4.1与ehcache一起使用。我可以用整数键缓存字符串值,但每当我尝试缓存对象时,它都会失败,不会出现任何错误。我保存在缓存中的模型(POJO)确实实现了hashcode、equals和tostring函数。 ehcache配置如下 Spring配置如下所示 我要缓存的类和方法 如果我将getPerson方法的返回值从Party对象替换为String,它就会工作。有什么想法
主要内容:1 Buffer的基本使用,2 Buffer的容量、位置、限制,3 Buffer的类型,4 Buffer的分配,5 将数据写入Buffer,6 从Buffer读取数据与NIO通道进行交互时,将使用Java NIO缓冲区。如您所知,数据从通道读取到缓冲区,然后从缓冲区写入通道。 缓冲区本质上是一个内存块,您可以在其中写入数据,然后可以在以后再次读取。该内存块包装在NIO Buffer对象中,该对象提供了一组方法,可以更轻松地使用该内存块。 1 Buffer的基本使用 使用Buffer来读