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();

            }

        }

    }

  • 相关阅读:
    第一章 新手入门
    Excle生成T层加工ODS层存储过程
    Excel生成建表角本
    数据仓库建模技巧
    算法第四章作业
    删数问题
    算法第三章作业
    第三章上机实践报告
    第二章作业
    Thinkphp6框架学习:($this->error()undefined)Call to undefined method appindexcontrollerAdmin::error()
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11136211.html
Copyright © 2011-2022 走看看