gpt4 book ai didi

Java DataOutputStream 对象在 8192 字节后刷新

转载 作者:行者123 更新时间:2023-12-01 23:33:13 24 4
gpt4 key购买 nike

我有一个 Java 变量声明如下:

RandomAccessFile file = new RandomAccessFile("path-to-file");
DataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file.getFD())));

问题是,在 2048 引入整数(或 8192 字节)之后,如果我尝试写入另一个整数,输出会刷新到磁盘而不会发出任何警告。

经过一番研究,我发现 DataOutputStream 有 64k 的限制,并且我找不到任何有关 BufferedOutputStream 或 FileOutputStream 的官方信息。

谁能告诉我哪个结构有这个限制以及如何增加它?

如果能找出为什么结构会在没有被告知的情况下刷新而不是仅仅引发异常,那就太好了?

最佳答案

刷新的是BufferedOutputStream,默认大小为8192:

public BufferedOutputStream(OutputStream out) {
this(out, 8192);
}

只需创建带有描述所需缓冲区大小的秒参数的 BufferedOutputStream!

int BUFFER_SIZE= <some value>;

DataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file.getFD()), BUFFER_SIZE));

但是,这可能不是您想要的!对写入进行排队并将它们写入一大块(在刷新时)是 BufferedOutputStream 的真正目的,它可以显着提高性能。冲水的时候完全没有问题。只要确保它在您最后一次写入后刷新即可。

此外,我很确定您对 DataOutputStream 的 64K 限制有误!
它本身会写入无限的字节,但是当编码为 UTF-8 时,它只会写入最大长度为 64K 的字符串。它还包含一个计数器已写入多少字节。显然,在 Integer.MAX_VALUE 写入字节后,这个会溢出,但这应该不重要!

关于Java DataOutputStream 对象在 8192 字节后刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19035936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com