GjenFly 2022-11-15 12:38 采纳率: 67.9%
浏览 22
已结题

java里面缓冲流里面缓冲区满了不会自动flush写入文件

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

img

  • 写回答

4条回答 默认 最新

  • 游一游走一走 2022-11-15 14:28
    关注

    你设置缓存大小为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));
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月23日
  • 已采纳回答 11月15日
  • 创建了问题 11月15日

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行