• 67.输入输出字符流


    IO分类:
    按照数据流向分类:
        输入流
        
        输出流

    按照处理的单位划分:
        字节流:字节流读取的都是文件中的二进制数据,读取到的二进制数据不会经过任何处理
        
        字符流:字符流读取的数据都是以字符为单位的,字符流也是读取的文件的二进制数据,只不过会把这些二进制数据转换成我们能识别的字符
                字符流 =  字节流 + 解码

    英文占一个字节
    中文占两个字节

    我们知道字节流之所以可以读数据,因为我们在字符和字节之间转换原因。我们定义缓存字节数组是为了提高我们的效率,
    但是如果字节数组长度如果小于我们需要读取的文本字节大小,那么可能会出现乱码的现象

    例如:我们需要读取3个文字,而我们定义的字节数组大小是5,那么最后一个文字是不是只读了一半,就算我们把字节数组长度定义为2并循环读取3次
    那么如果里面有英文了,这里就不是很好处理(在之前之所以没出现乱码是因为我们定义的字节数组足够大)
    其实你可以用无参的read方法读取数据,无参的read方法每次自能读取一个字节,读取文字会出现乱码(前面我们读取的是英文)

    而sun公司就给我们提供了一个字符流,它内部可以分辨我们要读的数据是否为英文或者是中文等其他语言来进行读取,并给我们解码

    输入字符流:
    --------------| Reader 输入字符流的基类。 抽象类
    ----------| FileReader 读取文件的输入字符流

    注意:FileReader 默认使用的是gbk编码表,这个里面包含了很多的码所对应的字符,如果FileReader读到数据找不到对应的字符,

    那么会返回一个未知字符对应的数字。位置字符占一个字节 ,者会导致数据丢失,导致文件损坏(例如:拷贝图片)


    输出字符流:
    --------------| Write  输出字符流的基类。 抽象类
    ----------| FileWrite  向文件输入数据

    注意:FileWrite内存中有一个8kb的字符数组,当我们使用write方法时,是把数据写入了数组中,并不是文本里面,
    除非我们使用close,flush方法,或者是数组存满了,才会把数据输入到文本中

    字符和字节流使用场景:

    字符流:如果读写字符数据的时候则使用字符流

    字节流:如果读取的字符都不需要转换成字符的时候,则使用字节流

    public class Demo2 {
        public static void main(String[] args) throws IOException {
            File file = new File("D:\新建文件夹\1.txt");
            System.out.println("原来的数据:"+readText(file));
            writeText(file);
            System.out.println("现在的数据:"+readText(file));
        }
        
        //读取文本里面的内容
        public static String readText(File file) throws IOException {
            FileReader fileReader = new FileReader(file);
            char[] cs = new char[1024];
            int length = 0;
            String str = "";
            while((length = fileReader.read(cs))!=-1) {
                str += new String(cs,0,length);
            }
            fileReader.close();
            return str;
            
        }
        
        //写入文本
        public static void writeText(File file) throws IOException{
            FileWriter fileWriter = new FileWriter(file,true);
            fileWriter.write("这个是添加的文字");
            fileWriter.close();
        }
    }
  • 相关阅读:
    util-tool工具 、时间格式化
    好用的 UI 调试技巧
    扩展jQuery的方法
    mybatis判断是否传递了条件
    mysql创建视图不允许子查询
    springMVC传递MAP给JS
    XPS15 安装ubuntu之后无法进入系统
    XPS15 9560 切换显卡之后,无法登陆的解决方式
    fedora安装chrome报错
    linux挂载硬盘
  • 原文地址:https://www.cnblogs.com/zjdbk/p/9069176.html
Copyright © 2020-2023  润新知