java中FileOutputStream write(int b)方法会出现乱码

java中FileOutputStream write(int b)方法,如果有中文,写到控制台就有乱码?
如果写到TXT文件就不是乱码?
我们都知道,write(int b)这是方法是按字节写的(也就是8个二进制位),写到控制台乱码可以理解,为什么写到文件里乱码就没了呢?
难道是因为在写文件的情况下,全部写完输出流才关闭?总觉得这样解释有点牵强,请高手指点。


try {
            logger.info("创建输入流");
            in = new FileInputStream(filePath + "/src/main/java/com/demo/io/bytestream/" +
                    "outputstream/FileInputStreamAndFileOutputStreamDemo.java");

            logger.info("创建输出流");
            out = new FileOutputStream(filePath + "/tmp/io/" +
                    "FileInputStreamAndFileOutputStreamDemo.txt");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        int i;
        try {
            // read() 从该输入流读取一个字节的数据。
            while((i=in.read())!=-1) {
                System.out.print((char)i);
                out.write(i);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

 

可能是因为 文件的编码方式和输出流的编码一致,而控制台的编码方式与输出流的编码不一致

我的思路是在写文件的时候,虽然是单个字节写入,但本质是append,全部写完之后整个流关闭。

你这完全是读取二进制数字,写二进制数字,相当于文件copy。
两个一模一样的东西,为什么会有乱码?

控制台乱码是因为你把它转成char输出了,一个一个char输出,不一定是完整的字符,所以会
歌词下载乱码。

貌似有道理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值