gpt4 book ai didi

java - BufferedWriter缓冲区大小及占用内存

转载 作者:行者123 更新时间:2023-12-02 12:11:49 24 4
gpt4 key购买 nike

我正在使用 BufferedWriter 将文本写入 Java 中的文件。但是,我在构造函数中提供了自定义缓冲区大小。问题是,无论我给出的大小如何,它都会以 block 的形式写入文件(例如,如果我将缓冲区大小指定为 8KB,则文件将写入一次 8KB)。但是,当我查看 bufferedwriter 对象占用的内存(使用 YourKit profiler)时,它实际上是给定缓冲区大小的两倍(在本例中为 16KB)。

我尝试查看内部实现以了解为什么会发生这种情况,我发现它正在创建一个具有给定大小的 char 数组。当它写入数组时,它占用缓冲区大小的两倍是有意义的,因为每个字符占用 2 个字节。

我的问题是,在这种情况下 BufferedWriter 如何只写入 8KB,而它在缓冲区中存储了 16KB。这在技术上正确吗?因为每次,即使缓冲区中有 16KB,它也只刷新 8KB(一半)。

最佳答案

But I expected all the chars stored in the char array to be written to the file when it reaches the buffer size (which would be 16 KB in my given example).

8K 字符占用 16 KB 内存。正确。

现在假设这些字符实际上都在 ASCII 子集中。

当您用 Java 将字符流写入输出文件时,字符会根据某种编码方案被编码为字节流。 (例如,此编码是由 OutputStreamWriter 类中的内容执行的。)

当您使用 8 位字符集/编码方案(例如 ASCII 或 Latin-1...或 UTF-8 (!!))对这 8K 字符进行编码时...每个字符都编码为 1 个字节。因此,刷新包含这些 8K 字符的缓冲区会生成 8K 字节写入。

关于java - BufferedWriter缓冲区大小及占用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46483822/

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