zoukankan      html  css  js  c++  java
  • java 字节流和字符流

    二者仅仅是操作单位不一样。

    InputStream和Reader是所有输入流的基类,他们都是抽象类,本身不能创建实例,但是他们是所有输入流的模板。

    一般来说处理字符或字符串时使用字符流,处理字节或二进制对象时应使用字节流;

    备注:字符流必须关闭资源,因为它中间有缓冲区!而字节流不需要!但是一般都会(最后)关闭资源!

     

    字节流

    字节流主要是操作byte(字节)的类型数据:

    字节输出流:OutputStream

    字节输入流:InputStream

    字符流

    Java中的字符是Unicode编码,是双字节的,1个字符 等于 2个字节;

    使用字节来处理字符文本就不太方便了,此时可以考虑使用字符流;

    字符流主要是操作char的类型数据:

    字符输出流:Writer

    字符输入流:Reader

    字节流和字符流的区别

     

    字节流和字符流在使用上的代码结构都是非常类似的,但是其内部本身也是有区别的,因为在进行字符流操作的时候会使用到缓冲区(内存中),而字节流操作的时候是不会使用到缓冲区的。

    在输出的时候,OutputStream类即使最后没有关闭内容也可以输出。但是如果是Writer的话,则如果不关闭,最后一条内容是无法输出的,因为所有的内容都是保存在了缓冲区之中,每当调用了close()方法就意味着清空缓冲区了。那么可以证明字符流确实使用了缓冲区:

    字节流:程序文件

    字符流:程序缓冲区(内存中)文件

     

    如果现在字符流即使不关闭也可以完成输出的话,则必须强制性清空缓冲区:

    方法:public void flush() throws IOException

     

    我的总结:

    两者相比,肯定使用字节流更加的方便,而且在程序中像图片、MP3等都是采用字节的方式的保存,那么肯定字节流会比字符流使用的更广泛。

    但是需要说明的是,但是如果要是想操作中文的话,字符流肯定是最好使的。(字节流的话可能会出现乱码(一个汉字分成了两份)!)

    Eg:

    package july7file;

    //字符流读出来,这时候就不会出现乱码的情况,在进行文字操作的时候最好使用字符流!

    import java.io.File;

    import java.io.FileNotFoundException;

    import java.io.FileReader;

    import java.io.IOException;

    import java.io.Reader;

    public class Demo6 {

        public static void main(String[] args) {

           

            File src = new File("6.4");

            read(src);

        }

       

        public static void read(File src){

            Reader r = null;

            try {

                r = new FileReader(src);

            } catch (FileNotFoundException e) {

                e.printStackTrace();

            }

           

            char []c = new char[1024];

            int len;

            try {

                while((len = r.read(c)) != -1){

                    System.out.println(new String(c,0,c.length));//打印到控制台

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

            try {

                r.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

  • 相关阅读:
    Largest Rectangle in Histogram
    Valid Sudoku
    Set Matrix Zeroes
    Unique Paths
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Path Sum II
    Path Sum
    Validate Binary Search Tree
    新手程序员 e
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11136211.html
Copyright © 2011-2022 走看看