- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 BufferedOutputStream 写入文件。在调试时,我注意到即使操作系统显示文件已获得最终大小,刷新操作也会花费很长时间。
我的理论:BufferedOutputStream告诉操作系统提前预留空间?因此,即使 BufferedOutputStream 尚未完全刷新,操作系统也已经显示了完整文件大小的文件?
这是正确的吗?
最佳答案
BufferedOutputStream
维护其自己的内部byte[]
缓冲区。正在查看implementation of the code ,它只是在将缓冲区写入底层流之前填充该缓冲区。 documentation没有提供更多帮助。
我认为如果不查看每个平台上的 native 实现,您就无法做出比这更多的假设。如果您想获得更多详细信息,您可以运行类似 strace 的命令。并检查一个简单程序发生了什么。
我编写了以下简单的程序
import java.io.*;
public class Test {
public static void main(String args[]) throws Exception {
File f = new File("test.txt");
FileOutputStream fos = new FileOutputStream(f);
BufferedOutputStream bos = new BufferedOutputStream(fos, 16384);
for (int i=0;i<10000;++i) {
bos.write(new byte[1024]);
}
}
}
并对其运行strace
。确保使用 -f
标志来跟踪子进程。下面显示了运行内容的过滤副本。
[pid 6394] mprotect(0x7fdebc03e000, 4096, PROT_READ|PROT_WRITE) = 0
[pid 6394] open("test.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4
[pid 6394] fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
[pid 6394] mprotect(0x7fdebc03f000, 16384, PROT_READ|PROT_WRITE) = 0
[pid 6394] write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\"..., 16384) = 16384
[pid 6394] write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\"..., 16384) = 16384
[pid 6394] write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\"..., 16384) = 16384
我没有看到任何预先预留空间的调用(请注意 mprotect 完全确定,但它似乎不相关)。我在 Linux 机器上看到的行为只是一个缓冲区被填充并写入磁盘。
关于JAVA BufferedOutputStream 刷新速度慢且文件大小正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5803775/
大家好,我遇到一些错误,所以我尝试使用 spring boot 和 React js 导入 excel 文件但在我的后端我收到错误 构造函数 BufferedOutputStream(FileOutp
我正在使用 BufferedOutputStream 写入文件。在调试时,我注意到即使操作系统显示文件已获得最终大小,刷新操作也会花费很长时间。 我的理论:BufferedOutputStream告诉
我正在尝试使用 TCP 开发一个简单的 Java 文件传输应用程序。我当前的服务器代码如下: package tcp.ftp; import java.io.BufferedInputStream;
我尝试创建一个 TFTP 服务器,但当它接收到一个文件时,似乎并非所有文件都保存到服务器上(缺少一些字节)。文件创建良好,大部分数据已写入,但由于文件不完整,因此被归类为损坏且无法打开。有谁知道如何解
我有几个问题- 1. 我有两台通过套接字连接的计算机。当程序执行时 outputStream.writeInt(value); outputStream.flush(); 究竟发生了什么?程序是否等到
我正在编写下载 servlet,它读取 html 文件并写入 servletOutputStream,传输的文件末尾的问题是添加一些垃圾数据,对此有何建议, 下面是我为此使用的代码 i
我制作的函数有一点问题。我希望每次我给这个函数一个字符串,它都会将我保存到同一文件中的新行,但实际上现在只保存我给出的最后一个字符串。这就像一次又一次的覆盖,需要一些帮助 public void Wr
我了解BufferedOutputStream 背后的理论。字节被写入缓冲区数组,直到它已满,然后写入(刷新)到底层流 - 这个想法比逐字节写入更快,因为操作系统调用更少。 但是,从 Buffered
我想知道 BufferedOutputStream 的用途,使用它时的性能提升? 最佳答案 这是来自 API of BufferedOutputStream 的行: The class impleme
我正在使用以下 Java 代码将一个字节写入文件 fileoutput.txt: FileOutputStream fos=new FileOutputStream("C:/tests/fileout
在Java中,我试图将服务器制作的每个BufferedOutputStream存储到线程之外的数组中,以便向所有连接的客户端广播一些数据。 // initialisation ArrayList
我有一个文件,其中包含一个写入文件开头的序列化 String 对象,后跟我尝试提取的文件的原始字节。 这是我的代码: FileInputStream fileInputStream = new Fil
这个问题已经有答案了: Java BufferedOutputStream vs OutputStream [duplicate] (1 个回答) 已关闭 4 年前。 在 java 8 中,以下之间有
这个问题已经有答案了: Sockets: BufferedOutputStream or just OutputStream? (1 个回答) 已关闭 8 年前。 BufferedOutputStre
我有多个实现 void convert(List list, OutputStream os) 方法。 给定的资源可以重用,因此方法实现不会释放它们。不过,在某些情况下,我想用 BufferedOu
我想使用 BufferedOutputStream 发送单独的消息。所以我做 bos.write(msg1); bos.flush(); bos.write(msg2); bos.flush()。另一
我试图在两端使用 BufferedOutputStream 和 BufferedInputStream 将文件从“服务器”发送到“客户端”。问题是,虽然我在每次写入(右侧)时刷新()服务器上的 Buf
我正在用 java 读取和写入图像文件。该文件可以是任何类型,所以我在写入图像时使用了缓冲读取器和写入器,但写入不正确。图像散落。 BufferedReader bufferedRea
我对 BufferedOutputStream 有疑问。我想通过套接字连接将 kml 文件从 Android 设备发送到 java 服务器。(连接正常,我已经可以在程序的其他部分与 PrintWrit
我正在尝试使用 Robert Sedgwick 在他的算法 4E 教科书中提供的 BinaryStdOut.java 类。该类的代码可以在他的网站上免费获得,但为了便于引用,我将在此处显示它的相关片段
我是一名优秀的程序员,十分优秀!