首页 新闻 搜索 专区 学院

BufferedInputStream的缓冲区设置无效

0
[待解决问题]
import java.io.BufferedInputStream;
import java.io.FileInputStream;

public class Hello{
    public static void main(String[] args) throws Exception {
        FileInputStream file = new FileInputStream("d:\\in.txt");  //文件内容为国abcd
        BufferedInputStream buf = new BufferedInputStream(file);
        System.out.println((char) buf.read());  //输出为å
        /*
        int data = 0;
        while ((data = buf.read()) != -1) {
            System.out.print((char) data);  //输出为å ½abcd
        }
        */
    }
}

如上代码,BufferedInputStream的缓冲区默认大小为8KB,为什么读取一次不能完全打印呢,就算选择注释里的循环打印,第一个字符“国”打印出来也乱码?

振袖秋枫问红叶的主页 振袖秋枫问红叶 | 菜鸟二级 | 园豆:202
提问于:2021-09-12 15:17
< >
分享
所有回答(1)
0
  • 字在java里面占用了3个字节
  • 你只读取了一个字节
  • 你还强转成了char
去哪里吃鱼 | 园豆:251 (菜鸟二级) | 2021-09-13 09:48

BufferedInputStream的缓冲区不是8K吗,我读一次不就够了吗

支持(0) 反对(0) 振袖秋枫问红叶 | 园豆:202 (菜鸟二级) | 2021-09-13 09:57

@振袖秋风问红叶: 但是这里你调用的是 read()方法,这个方法只返回一个字节。可能你把缓冲区弄混 了,这个8K的缓冲区,是指你在使用 BufferedInputStream.read() 读取文件的时候,它会从文件里面加载最多8K的数据到它自身的缓冲字节数组里,然后再从这8k缓存里返回你要的单个字节

支持(0) 反对(0) 去哪里吃鱼 | 园豆:251 (菜鸟二级) | 2021-09-13 10:59

@去哪里吃鱼: 哦哦懂了,原来还是只返回一个字节,谢谢大佬解答

支持(0) 反对(0) 振袖秋枫问红叶 | 园豆:202 (菜鸟二级) | 2021-09-13 11:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册