字符流和字节流

先上图,输入流和输出流的类层次图:

字节流:一个字节一个字节的读取,一个字节为8位,读取的单位是字节。

字符流:一个字符一个字符的往外读取,一个字符为两个字节,读取的单位是字符;许多文字在java中占两个字节,所以需要这样的流存在去读取,才不会产生乱码。

区别:

1 类系不同
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。

2 字节流在操作的时候不会使用到缓冲区,字符流会使用到
缓冲区概念:
缓冲区可以简单地理解为一段内存区域。可以简单地把缓冲区理解为一段特殊的内存。某些情况下,如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。

3实际开发的使用
计算机上所有文件的储存是都是字节(byte)的储存
字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!
一般字节流使用较为广泛,图片视频的传输可使用字节流,文字传输可使用字符流。

/**节点流   字节流fileinputstream和字符流filereaderd的使用
 * 1.使用fileinputstream读取出来的中文内容有乱码,字节流中的read是一个字符一个字符的读取,而一个中文有两个字节,所以汉字无法正确显示
 * 2.使用filereader读取,read是一个字符一个字符的读取,可正常显示读取的中文汉字*/
package StreamDemo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileInputStreamDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //变量b装载read()方法返回的整数
        int b = 0;
        FileInputStream in = null;
        //FileReader in =null;
        //使用filereader会抛出异常,需要捕获
        try {
            in = new FileInputStream("a.txt");
            //in = new FileReader("a.txt");
        } catch (Exception e) {
            // TODO: handle exception
           System.out.println("找不到此文件");
        }
        long num = 0;
        //read方法会抛出异常,需要捕获
        try {
            //循环结束,会返回-1
            while((b = in.read()) != -1){
                //使用char装换,不然打印出来的就是数字
                System.out.println((char)b);
                num++;
            }
            //关闭输入流
            in.close();
            System.out.println("共输出了"+num + "个字符");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("文件读取错误");
        }

    }

}

猜你喜欢

转载自www.cnblogs.com/ww11/p/9243474.html