JAVA学习笔记14 IO流(2)

在这里插入图片描述编码与解码方式必须是同一种方式,不然会解析错误,造成乱码。

在这里插入图片描述
使用InputStreamReader可以用指定方式如:UTF-8,GBK读取字符流。
使用OutputStreamReader可以用指定方式写入字符流。
如果写入的是中文,但是却用的GBK方式写入,那么文件中也会出现乱码,但是如果读取的时候依然使用GBK方式读出,那么也可以成功读出这个中文。

这个与FileOutputStream的write的区别在于,write写入的是字符的某个字符集的二进制编码。
而OutputStreamReader是可以直接写入某个字符,然后打开文件的时候,文件使用这个指定的方式编码展示这个字符。如:写入”中国“,”UTG-8",那么文件中存的就是UTF-8下的"中国"。
也可以写二进制编码,然后在文件中被转换为二进制编码对应编码集的那个字符,如osw.write(99) 写入的就是c

public class StringDemo {
    public static void main(String[] args) throws IOException {
        String s="中国";

//        byte[]  bys=s.getBytes();
        byte[] bys=s.getBytes("UTF-8");
        System.out.println(Arrays.toString(bys));

        String ss=new String(bys,"UTF-8");
        System.out.println(ss);

        FileOutputStream fos=new FileOutputStream("ieda_test\\src\\IO\\fos.txt");
        OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");
        osw.write("中国");
        osw.close();

        InputStreamReader isr=new InputStreamReader(new FileInputStream("ieda_test\\src\\IO\\fos.txt"),"GBK");
        int ch;
        while ((ch=isr.read())!=-1){
            System.out.print((char)ch);
        }
        isr.close();

}
}

执行结果:
在这里插入图片描述fos.txt中的内容:
在这里插入图片描述

在这里插入图片描述

public class OutputStreamDemo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos=new FileOutputStream("ieda_test\\src\\IO\\fos.txt");
        OutputStreamWriter osw=new OutputStreamWriter(fos);
        osw.write("中国!!");
    }
}

fos.txt中:什么也没有写入
在这里插入图片描述

原因:采用字符流写数据不能直接写入到文件中,而是通过FileOutputStream才能写入,现在其实还是在一个缓冲区中,要让数据从缓冲区进入到文件中去,需要使用
ows.flush()或者ows.close()才行。
在这里插入图片描述
在这里插入图片描述
需要注意:这里的便捷类只是在写和读数据的时候可以使用,如果涉及编码与解码问题,那么还是只能使用InputStreamReader和OutputStreamReader.
在这里插入图片描述
在这里插入图片描述
和字节缓冲流一样,速度更快了。但是还是有以下区别
在这里插入图片描述
要换行,可以加换行符\r\n但不同操作系统的换行符都不一样,所以这样不太好,可以使用newLine()来分行在这里插入图片描述
同样的,可以使用readLine( )来只读取一行内容。在这里插入图片描述

新年快乐!!


补充总结:在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值