IO流篇之字符流与字节流

⭐字符流和字节流的区别和使用场景

1.区别

  1. 字符流的操作是在缓冲区(属于内存)中完成的,而字节流是直接操作文件
  2. 字符流主要用来处理跟字符相关的数据(字符,字符数组,字符串),字节流主要用于处理字节相关的数据(字节,字节数组,二进制对象)
  3. 字符流write()的时候需要flush()一下,因为他写的数据都在缓存中,只有close()关闭流的的时候才会往外写,字节流就不用

2.使用场景

虽然不管是文件还是网络传输,其内容本质都是字节,但是依然可以用字符流读写

 public static void main(String[] args) {
        try {
            InputStream in=new FileInputStream(new File("E:\\测试文件.txt"));//测试文件中的文本为abc
            byte[] b=new byte[2];
            int len=0;
           while ((len=in.read(b))!=-1){
               String a=new String(b,0,len);
               System.out.println(a);
           }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

一般只需要字节流就好了,但是如果文件中有中文的情况(Reader类的read()方法返回类型为int :作为整数读取的字符(占两个字节共16位),范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1。inputStream的read()虽然也返回int,但由于此类是面向字节流的,一个字节占8个位,所以返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。因此对于不能用0-255来表示的值就得用字符流来读取!比如说汉字,所以要采用第二步也就是字符流操作)不用字符流的话就会乱码哦

posted @ 2020-08-04 17:50  未名丶花开丶  阅读(199)  评论(1)    收藏  举报