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输出,不一定是完整的字符,所以会歌词下载乱码。
貌似有道理