问下为啥我这char数组大小都超过缓冲区2个字节的大小了,我看文件还没有自动写入,这是为啥?缓冲区不是满了就会自动flush吗,就会写入到文件嘛?

问下为啥我这char数组大小都超过缓冲区2个字节的大小了,我看文件还没有自动写入,这是为啥?缓冲区不是满了就会自动flush吗,就会写入到文件嘛?

你设置缓存大小为2,只是表示你的显示缓存BufferedWriter失效应该刷新,在最底层有个默认的8192缓存,你的数据不够所以没有刷出.如果你一定要看下效果的话可以运行看下效果,就是你要的预期了
import lombok.SneakyThrows;
import sun.nio.cs.StreamEncoder;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.lang.reflect.Field;
import java.nio.ByteBuffer;
public class Test03 {
@SneakyThrows
public static void main(String[] args) {
final FileWriter fileWriter = new FileWriter("test.txt");
changeBufferTo2(fileWriter);
final BufferedWriter bufferedWriter = new BufferedWriter(fileWriter, 2);
final char[] chars = {'8', '2', '3', '4', '5'};
bufferedWriter.write(chars);
}
private static void changeBufferTo2(FileWriter fileWriter) throws NoSuchFieldException, IllegalAccessException {
final Field se = OutputStreamWriter.class.getDeclaredField("se");
se.setAccessible(true);
final StreamEncoder o = (StreamEncoder) se.get(fileWriter);
final Field bb = o.getClass().getDeclaredField("bb");
bb.setAccessible(true);
bb.set(o, ByteBuffer.allocate(2));
}
}